没有模式名称的postgresql pg_dump

时间:2018-03-05 11:02:20

标签: postgresql pg-dump pg-restore postgresql-10

pg_dump版本10.3开始明确地将模式名称添加到表名中。那么过去是什么

INSERT INTO table (id) VALUES (1);

现在是

INSERT INTO public.table (id) VALUES (1);

如何关闭它?我的问题是,我把它转储到你没有模式名称的mariadb。

5 个答案:

答案 0 :(得分:1)

像我一样,如果只是您关心的INSERT语句,那么我认为这是安全的,并将从表中删除“公共”模式。

sed -i -e 's/^INSERT INTO public\./INSERT INTO /' <filename.sql>

它会在适当位置修改文件,所以要小心。

答案 1 :(得分:0)

我也搜索了这个切换器但它不存在。 之所以添加此行为,是因为 - https://wiki.postgresql.org/wiki/A_Guide_to_CVE-2018-1058:_Protect_Your_Search_Path

在我的工作中,我现在使用dump的新变体,在事务中重命名模式。

答案 2 :(得分:0)

在您的postgresql控制台(连接到数据库)中执行以下命令:

set search_path to public;

答案 3 :(得分:0)

如果您已安装Docker,则可以采取以下措施:

docker run -it postgres:10.2 pg_dump postgresql://user:pass@host/database

答案 4 :(得分:-3)

当然这只是linux的决定(不是postgres),但它可以帮助你,我想

sed -i 's/public.//g' your_dmp_file

P.S。我没有检查这个,可能你应该修理它