18

pg_dump 10.3 版开始将模式名称显式添加到表名称中。那么以前是什么

INSERT INTO table (id) VALUES (1);

就是现在

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

你怎么能关掉它?我的问题是,我将它转储到一个没有架构名称的 mariadb 中。

4

5 回答 5

1

如果它只是您关心的 INSERT 语句,就像我一样,那么我相信这是安全的,并且会从您的表中删除“公共”模式。

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

它会修改文件,所以要小心。

于 2020-07-22T01:31:18.733 回答
0

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

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

于 2018-03-14T16:34:49.447 回答
-1

如果你安装了 Docker,你可以做一个小技巧:

docker run -it postgres:10.2 pg_dump postgresql://user:pass@host/database
于 2020-03-04T13:16:16.020 回答
-2

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

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

Ps我没有检查这个,可能你应该修复它

于 2018-03-05T15:23:04.783 回答
-4

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

set search_path to public;
于 2019-02-01T08:40:44.553 回答