Из вашего предыдущего вопроса я предполагаю, что вы действительно пытаетесь сравнить базы данных, чтобы увидеть, совпадают ли они с данными, включая данные.
Как мы видели там , pg_dump не будет вести себя детерминистически. Тот факт, что один файл является обратным к другому, вероятно, просто случайен.
Вот способ, которым вы можете сделать общее сравнение, включая схему и данные.
Сначала сравните схему , используя этот метод .
Во-вторых, сравните данные, выгрузив их все в файл в порядке, который будет согласованным. Порядок гарантируется сначала сортировкой таблиц по имени, а затем сортировкой данных в каждой таблице по столбцам первичного ключа.
Запрос ниже генерирует операторы COPY
.
select
'copy (select * from '||r.relname||' order by '||
array_to_string(array_agg(a.attname), ',')||
') to STDOUT;'
from
pg_class r,
pg_constraint c,
pg_attribute a
where
r.oid = c.conrelid
and r.oid = a.attrelid
and a.attnum = ANY(conkey)
and contype = 'p'
and relkind = 'r'
group by
r.relname
order by
r.relname
Выполнение этого запроса даст вам список операторов вроде copy (select * from test order by a,b) to STDOUT;
Поместите их все в текстовый файл и выполните их через psql для каждой базы данных, а затем сравните выходные файлы. Возможно, вам придется настроить параметры вывода на COPY
.