pg_dump 10.3 版开始将模式名称显式添加到表名称中。那么以前是什么
INSERT INTO table (id) VALUES (1);
就是现在
INSERT INTO public.table (id) VALUES (1);
你怎么能关掉它?我的问题是,我将它转储到一个没有架构名称的 mariadb 中。
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
Ps我没有检查这个,可能你应该修复它
在您的 postgresql 控制台中执行此命令(连接到您的数据库):
set search_path to public;