Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Негарантированный порядок выражений в pg_dump / 5 сообщений из 5, страница 1 из 1
14.04.2016, 02:39
    #39215174
Sergei.Agalakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Негарантированный порядок выражений в pg_dump
Сравниваю структуры двух баз по скриптам полученным от pg_dump. Базы в одном кластере, collation, locale, encoding одинаковы. Получаю разный порядок строк для грантов как на примере внизу.

Код: plsql
1.
2.
3.
4.
5.
REVOKE ALL ON TABLE contracttype FROM PUBLIC;
REVOKE ALL ON TABLE contracttype FROM madmin;
GRANT ALL ON TABLE contracttype TO madmin;
GRANT SELECT ON TABLE contracttype TO mro;
GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE contracttype TO musers;



и

Код: plsql
1.
2.
3.
4.
5.
REVOKE ALL ON TABLE contracttype FROM PUBLIC;
REVOKE ALL ON TABLE contracttype FROM madmin;
GRANT ALL ON TABLE contracttype TO madmin;
GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE contracttype TO musers;
GRANT SELECT ON TABLE contracttype TO mro;



То-есть права одинаковы, но порядок строк разный. Происходит не на всех таблицах, но часто. Почему такое может быть, как это вылечить, и не следует ли открыть баг?
...
Рейтинг: 0 / 0
14.04.2016, 05:00
    #39215178
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Негарантированный порядок выражений в pg_dump
Sergei.AgalakovСравниваю структуры двух баз по скриптам полученным от pg_dump. Базы в одном кластере, collation, locale, encoding одинаковы. Получаю разный порядок строк для грантов как на примере внизу.

Код: plsql
1.
2.
3.
4.
5.
REVOKE ALL ON TABLE contracttype FROM PUBLIC;
REVOKE ALL ON TABLE contracttype FROM madmin;
GRANT ALL ON TABLE contracttype TO madmin;
GRANT SELECT ON TABLE contracttype TO mro;
GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE contracttype TO musers;



и

Код: plsql
1.
2.
3.
4.
5.
REVOKE ALL ON TABLE contracttype FROM PUBLIC;
REVOKE ALL ON TABLE contracttype FROM madmin;
GRANT ALL ON TABLE contracttype TO madmin;
GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE contracttype TO musers;
GRANT SELECT ON TABLE contracttype TO mro;



То-есть права одинаковы, но порядок строк разный. Происходит не на всех таблицах, но часто. Почему такое может быть, как это вылечить, и не следует ли открыть баг?

А почему вы считаете что порядок должен быть одинаковым в внутреннем формате pg_dump?
Единственное требование - корректное восстановление, а какой то единообразрый порядок никто не гарантирует и уже много раз в минорных релизах он менялся даже на одной базе.
Чем вам разный порядок мешает?

Структуру баз по результатам сравнения текстового pg_dump сверять НЕЛЬЗЯ (ну то есть можно то можно но вот проблем аналогичным вашей возможно много и разных)! Он не предназначен для такой задачи (хотя судя по этому форуму: «Мыши плакали, кололись, но продолжали грызть кактус»).

PS: в вашем конкретном случае скорее всего разница в порядке выдачи grants, на одной базе сначала был выдан грант на mro на второй сначала был выдан грант на musers.
...
Рейтинг: 0 / 0
14.04.2016, 16:01
    #39215886
Sergei.Agalakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Негарантированный порядок выражений в pg_dump
Maxim Boguk,
А какими средствами, желательно бесплатными, МОЖНО сравнить гранты на двух базах данных с одинаковой структурой? Для сравнения схем есть неплохие платные, и даже бесплатные решения. А вот как легко проверить расхождения прав в DEV и PROD? Если б pg_dump делал дополнительную сортировку по именам, то любые расхождения в схемах и грантах в дву отлавливались бы за минуты штатными средствами. А так приходится глазками конфликты проверять.
Стоило бы добавить детерминированный вывод скрипта для pg_dump как опцию, или как стандартное поведение, IMHO.
...
Рейтинг: 0 / 0
14.04.2016, 17:34
    #39216014
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Негарантированный порядок выражений в pg_dump
Sergei.AgalakovMaxim Boguk,
А какими средствами, желательно бесплатными, МОЖНО сравнить гранты на двух базах данных с одинаковой структурой? Для сравнения схем есть неплохие платные, и даже бесплатные решения. А вот как легко проверить расхождения прав в DEV и PROD? Если б pg_dump делал дополнительную сортировку по именам, то любые расхождения в схемах и грантах в дву отлавливались бы за минуты штатными средствами. А так приходится глазками конфликты проверять.
Стоило бы добавить детерминированный вывод скрипта для pg_dump как опцию, или как стандартное поведение, IMHO.

Код: plaintext
pg_dump -F p -s dbname | grep -E '^GRANT' | sort 

Совсем уже разучились command line использовать :(.


--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
15.04.2016, 23:12
    #39216983
Sergei.Agalakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Негарантированный порядок выражений в pg_dump
Так-то и я умею! Во-первых, теряется группировка по объектам (смотри мои примеры), во-вторых это только гранты в одну строку, а другие DDL идут в несколько строк. Нет, надо все-таки попросить такую фичу!
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Негарантированный порядок выражений в pg_dump / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]