我有一个丢失了一些记录的postgresql数据库。我想从几天前获取数据库的pg_dump SQL转储,并将其与当前的生产数据库合并。许多记录将是重复的,因此它可以跳过重复。这样做的最佳方式是什么?
答案 0 :(得分:1)
我会在另一个数据库中恢复转储。然后,对于我怀疑丢失数据的表,我会将其与其他数据库中恢复的表进行比较。如果您不知道哪个表丢失了数据,则必须在数据库的每个表上对此比较进行编程。
请记住you can't perform sql queries using multiple databases。
您可以重命名要检查的表,并将其转储/还原到包含丢失数据的表的数据库中。然后,您可以像这样执行一个SQL查询:
select * from foo where var1 not in (select var1 from foo_restored);
答案 1 :(得分:0)
您可以尝试RULES。看看http://www.pointwriter.com/blog/index.php?/archives/6-REPLACE-in-PostgreSQL.html
调整此示例:
CREATE RULE "insert_ignore" AS
ON INSERT TO "your_table"
WHERE
EXISTS(SELECT 1 FROM your_table WHERE key=NEW.key [...])
DO INSTEAD
NOTHING;
这是未经测试的,所以请在安全的环境中尝试。