Jac*_*cia 19 postgresql postgresql-9.3 pg-dump
这是在 9.3 上,但我记得自 7.x 以来发生过类似的事情。所以我创建了数据库并在其中安装了 plpgsql 扩展。后来我创建了一个 pg_dump,在将它恢复到数据库之前,我确保它也有 plpgsql 扩展名。然后在恢复时会发生这种情况:
pg_restore: creating EXTENSION plpgsql
pg_restore: creating COMMENT EXTENSION plpgsql
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 2053; 0 0 COMMENT EXTENSION plpgsql
pg_restore: [archiver (db)] could not execute query: ERROR: must be owner of extension plpgsql
Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
Run Code Online (Sandbox Code Playgroud)
我正在创建一堆脚本,pg_restore 返回 0 对我来说非常重要,所以我可以忽略这一点这一事实没有任何好处。让我感到困惑的是 IIRC 我需要以 postgres 主用户的身份创建扩展,所以我不知道为什么所有这些扩展的东西最终都在我的转储中。毕竟,我不是语言/扩展的所有者?
无论如何,对于如何摆脱这种情况的任何建议,我将不胜感激。请注意,我知道 -l/-L 开关是如何工作的。然而,仅仅纠正一个简单的扩展注释似乎需要付出太多努力。
你可以做
pg_dump ... | grep -v -E '^(CREATE\ EXTENSION|COMMENT\ ON)' >out.sql
Run Code Online (Sandbox Code Playgroud)
这是我用来用 postgres 导入到谷歌云 sql 的东西。
编辑:添加了“行首”插入符号以不排除包含此文字文本的行。
小智 5
-L
以自定义文件格式进行转储后,将标志与 pg_restore 一起使用。
-L --使用列表=
list-file
list-file
仅还原 中列出的那些存档元素
list-file
,并按照它们在文件中出现的顺序还原它们。请注意,如果过滤开关(例如-n
或 )-t
与 一起使用-L
,它们将进一步限制恢复的项目。
list-file
通常是通过编辑先前操作的输出来创建的-l
。;
可以移动或删除行,也可以通过在行开头放置分号 ( ) 来注释掉行。[...]
参考: pg_restore(PostgreSQL 文档 9.3)
pg_dump -Fc -f pg.dump db_name
pg_restore -l pg.dump | grep -v 'COMMENT - EXTENSION' | \
grep -v 'plpgsql' > pg_restore.list
pg_restore --use-list pg_restore.list pg.dump
Run Code Online (Sandbox Code Playgroud)
在这里你可以看到相反的情况是正确的:
pg_dump -Fc -f pg.dump db_name
pg_restore -l pg.dump | grep 'COMMENT - EXTENSION' | grep 'plpgsql' > pg_restore.list
pg_restore --use-list pg_restore.list pg.dump
--
-- PostgreSQL database dump
--
-- Dumped from database version 9.4.15
-- Dumped by pg_dump version 9.5.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET client_min_messages = warning;
SET row_security = off;
--
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:
--
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
--
-- PostgreSQL database dump complete
--
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18174 次 |
最近记录: |