pg_dump 10.3版开始将模式名显式添加到表名中。
INSERT INTO table (id) VALUES (1);
字符串现在
INSERT INTO public.table (id) VALUES (1);
型我的问题是,我把它转储到一个没有模式名的mariadb中。
wqnecbli1#
如果您只关心XML语句,就像我一样,那么我相信这是安全的,并将从表中删除“public”模式。
sed -i -e 's/^INSERT INTO public\./INSERT INTO /' <filename.sql>
字符串它会修改文件的位置,所以要小心。
ipakzgxi2#
我也搜索了这个切换器,它不存在。这个行为是因为这个-https://wiki.postgresql.org/wiki/A_Guide_to_CVE-2018-1058:_Protect_Your_Search_Path而添加的在我的工作中,我现在使用dump的新变体,在事务中重命名模式。
bt1cpqcv3#
在pg_dump源中添加几个modifications,您可以恢复以前的行为,使INSERT语句不包含模式名称。要使用这些更改构建Docker镜像,请使用以下内容创建Dockerfile:
pg_dump
INSERT
Dockerfile
FROM alpine:latest WORKDIR /usr/src/postgresql RUN apk add --no-cache \ alpine-sdk \ perl \ readline-dev \ zlib-dev \ bison \ flex \ git \ coreutils \ linux-headers \ util-linux-dev RUN git clone \ --depth 1 \ --branch feat/schema-less-pg-dump-11 \ https://github.com/tindzk/postgres.git . RUN ./configure && make RUN cp src/bin/pg_dump/pg_dump /usr/bin/ && \ cp ./src/interfaces/libpq/libpq.so* /usr/lib/ RUN apk del alpine-sdk \ && rm -rf /var/cache/apk/* /usr/src/postgresql CMD ["pg_dump"]
字符串然后,使用它如下:
docker build -t pgdump-11 . docker run \ -e PGPASSWORD=$db_password \ -v "$(pwd)":/data/ \ pgdump-11 \ pg_dump \ --verbose \ "postgres://$db_user@$db_host:$db_port/$db_name" \ --schema $db_schema \ --file /data/dump.sql
型这种方法比模式匹配更鲁棒,并且避免了误报的风险。
gstyhher4#
当然这只是Linux决定(不是postgres),但我想这对你有帮助
sed -i 's/public.//g' your_dmp_file
字符串P.S.我没有检查这个,也许你应该修复它
2w2cym1i5#
如果你已经安装了Docker,你可以做一个技巧:
docker run -it postgres:10.2 pg_dump postgresql://user:pass@host/database
字符串
hiz5n14c6#
在postgresql控制台(连接到数据库)中执行以下命令:
set search_path to public;
6条答案
按热度按时间wqnecbli1#
如果您只关心XML语句,就像我一样,那么我相信这是安全的,并将从表中删除“public”模式。
字符串
它会修改文件的位置,所以要小心。
ipakzgxi2#
我也搜索了这个切换器,它不存在。这个行为是因为这个-https://wiki.postgresql.org/wiki/A_Guide_to_CVE-2018-1058:_Protect_Your_Search_Path而添加的
在我的工作中,我现在使用dump的新变体,在事务中重命名模式。
bt1cpqcv3#
在
pg_dump
源中添加几个modifications,您可以恢复以前的行为,使INSERT
语句不包含模式名称。要使用这些更改构建Docker镜像,请使用以下内容创建
Dockerfile
:字符串
然后,使用它如下:
型
这种方法比模式匹配更鲁棒,并且避免了误报的风险。
gstyhher4#
当然这只是Linux决定(不是postgres),但我想这对你有帮助
字符串
P.S.我没有检查这个,也许你应该修复它
2w2cym1i5#
如果你已经安装了Docker,你可以做一个技巧:
字符串
hiz5n14c6#
在postgresql控制台(连接到数据库)中执行以下命令:
字符串