从pg_dump文件恢复数据库会创建奇怪的表

时间:2014-04-03 06:41:53

标签: postgresql restore

我创建了这样的备份:

pg_dump dbname > file

我正在尝试恢复数据库(在删除数据库和创建数据库之后),如下所示:

psql dbname < file

我得到的是一个数据库,其中包含使用dbname.tablename而非tablename创建的表格。

如何恢复postgres数据库,确保其创建的表只有tablename而不是dbname.tablename

1 个答案:

答案 0 :(得分:0)

感谢@Craig Ringer指出我正确的方向。

是的,原始数据库的数据库中有SET search_path。这创建了具有前缀为表名的模式名称的表名。

从备份脚本中删除或注释那些没有架构前缀的表。这是可取的。但是恢复并没有导致完全恢复,许多表格被遗漏了。

通过常规手段恢复也是如此。使用前缀为模式名称创建表。 sql查询脚本崩溃是因为每次查询表时都没有指定模式名称。为了解决这个问题,我遵循了这个 - https://stackoverflow.com/a/2875705/1945517

ALTER ROLE <your_login_role> SET search_path TO dbname;

这修复了破坏的查询。