我创建了这样的备份:
pg_dump dbname > file
我正在尝试恢复数据库(在删除数据库和创建数据库之后),如下所示:
psql dbname < file
我得到的是一个数据库,其中包含使用dbname.tablename
而非tablename
创建的表格。
如何恢复postgres数据库,确保其创建的表只有tablename
而不是dbname.tablename
?
答案 0 :(得分:0)
感谢@Craig Ringer指出我正确的方向。
是的,原始数据库的数据库中有SET search_path
。这创建了具有前缀为表名的模式名称的表名。
从备份脚本中删除或注释那些没有架构前缀的表。这是可取的。但是恢复并没有导致完全恢复,许多表格被遗漏了。
通过常规手段恢复也是如此。使用前缀为模式名称创建表。 sql查询脚本崩溃是因为每次查询表时都没有指定模式名称。为了解决这个问题,我遵循了这个 - https://stackoverflow.com/a/2875705/1945517
ALTER ROLE <your_login_role> SET search_path TO dbname;
这修复了破坏的查询。