pg_dump版本 10.3 开始将模式名称显式添加到表名称中。那么过去是什么
INSERT INTO table (id) VALUES (1);
现在是
INSERT INTO public.table (id) VALUES (1);
你怎么能把它关掉?我的问题是,我将其转储到没有模式名称的mariadb中。
如果只是您关心的 INSERT 语句,就像我一样,那么我相信这是安全的,并且会从您的表中删除"公共"架构。
sed -i -e 's/^INSERT INTO public./INSERT INTO /' <filename.sql>
它会就地修改文件,所以要小心。
我也搜索了这个切换器,它不存在。添加此行为是因为 -https://wiki.postgresql.org/wiki/A_Guide_to_CVE-2018-1058:_Protect_Your_Search_Path
在我的工作中,我现在使用转储的新变体,并在事务中重命名模式。
如果你安装了Docker,你可以做一个技巧:
docker run -it postgres:10.2 pg_dump postgresql://user:pass@host/database
这只是 linux 的决定(不是 postgres(,但我想它会帮助你
sed -i 's/public.//g' your_dmp_file
附言我没有检查这个,也许你应该修复它
在 postgresql 控制台(连接到数据库(中执行以下命令:
set search_path to public;