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

我正在创建pg_dumps,DUMP1和DUMP2.

DUMP1和DUMP2完全相同,只是DUMP2以DUMP1的REVERSE顺序转储.

无论如何,我可以对两个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(从a,b的测试顺序中选择*)到STDOUT;将这些全部放在一个文本文件中,并通过psql为每个数据库运行它们,然后比较输出文件.您可能需要使用output settings to COPY进行调整.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...