gpt4 book ai didi

php - 排序 postgresql 数据库转储 (pg_dump)

转载 作者:IT王子 更新时间:2023-10-29 01:02:50 24 4
gpt4 key购买 nike

我正在创建 pg_dumps、DUMP1 和 DUMP2。

DUMP1 和 DUMP2 完全相同,除了 DUMP2 以与 DUMP1 相反的顺序转储。

无论如何我可以对两个 DUMPS 进行排序,以便两个 DUMP 文件完全相同(使用 diff 时)?

我正在使用 PHP 和 Linux。我尝试在 Linux 中使用“排序”,但这不起作用...

谢谢!

最佳答案

From your previous question ,我假设你真正想做的是与数据库进行比较,看看它们是否相同,包括数据。

As we saw there , pg_dump 不会确定性地运行。一个文件与另一个文件相反的事实可能只是巧合。

这是一种可以进行包括架构和数据在内的总体比较的方法。

首先,比较模式using this method .

其次,通过以一致的顺序将所有数据转储到一个文件来比较数据。通过首先按名称对表进行排序,然后按主键列对每个表中的数据进行排序来保证顺序。

下面的查询生成 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 为每个语句运行它们数据库,然后比较输出文件。您可能需要调整 output settings to COPY .

关于php - 排序 postgresql 数据库转储 (pg_dump),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2204640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com