不带模式名称的PostgreSQL pg_dump

24

从pg_dump版本10.3开始,已经明确将模式名称添加到表名中。因此,以前的内容:

INSERT INTO table (id) VALUES (1);

现在是

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

你如何关闭它?我的问题是,我要将其转储到一个没有架构名称的mariadb中。

5个回答

2

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

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

它会直接在文件中进行修改,所以请小心操作。

1

哪个新变量?这会有助于回答这个问题。 - Albert Vaca Cintora
2
使用 pg_dump 新版本创建的变量带有查询中的模式名称。答案是“在已打补丁的 pg_dump 版本中无法关闭此功能”。可以使用旧版本或在转储之前将模式重命名为“big_special_name_for_replace”,并在转储文件中替换此名称。 - Tatiana P

-3
如果您已经安装了Docker,您可以使用一个技巧:
docker run -it postgres:10.2 pg_dump postgresql://user:pass@host/database

不适用于较新的数据库 pg_dump: 服务器版本:12.2;pg_dump 版本:10.2 (Debian 10.2-1.pgdg90+1) pg_dump: 中止,因为服务器版本不匹配 - wutzebaer

-3

当然这只是Linux的决定(而不是Postgres),但我想它会对你有所帮助。

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

顺便说一下,我没有检查过这个,也许你应该修复一下


4
这样做行不通,任何包含“public”的数值的表格都会被错误地移除。 - Alan Tan
谢谢。这实际上是我所做的,因为我确定没有包含字符串“public.”的数据。但这有点丑陋。我很惊讶居然没有适当的方法来关闭它。 - raumi75

-4
在您连接到数据库的postgresql控制台中执行此命令:
set search_path to public;

MySQL 中没有搜索路径。 - pensnarik
@pensnarik 这个问题是特定于PostgreSQL的... - siyb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接