我有一个postgres数据库,我正在尝试使用以下内容备份表:
pg_dump --data-only --table=<table> <db> > dump.sql
几天后,我试图覆盖它(基本上想要删除所有数据并从我的转储中添加数据):
psql -d <db> -c --table=<table> < dump.sql
但它不会覆盖,它会在不删除现有数据的情况下添加它。
任何建议都很棒,谢谢!
答案 0 :(得分:2)
您基本上有两个选项,具体取决于您的数据和fkey限制。
如果表中没有fkeys,那么最好的办法就是在加载表之前截断表。请注意,truncate在事务中表现得有些奇怪,所以最好的办法是(在事务块中):
这将避免其他交易看到空表。
如果您有fkeys,那么您可能需要加载到临时表中然后执行upsert。在这种情况下,如果其他事务可能想要写入表(也在事务块中),您可能仍希望锁定表以避免竞争条件:
第3阶段有点棘手。您可能需要单独提出一个问题,但基本上您将有两个阶段(并在与文档协商后写下):
希望这有帮助。