【发布时间】:2018-05-03 14:44:21
【问题描述】:
我正在使用pg_dump -O -U <user> <db> >dump.sql 转储一个大型数据库。
Here is the gist of dump.sql 剥离了所有不相关的内容。
当使用psql -f dump.sql -U <user> <db> 将转储导入另一个 Postgres 实例(相同设置)时,CREATE INDEX 第 147 行发生以下错误:
psql:dumped.sql:147: ERROR: type "hstore" does not exist
LINE 5: element hstore;
^
QUERY:
DECLARE
arrHstore ALIAS FOR $1;
key ALIAS FOR $2;
element hstore;
string text;
BEGIN
FOREACH element IN ARRAY arrHstore LOOP
string := concat(string, ' ', element->key);
END LOOP;
RETURN trim(leading from string, ' ');
END;
CONTEXT: compilation of PL/pgSQL function "immutable_array_to_string" near line 5
所以除了最后的CREATE INDEX 之外的一切都奏效了。
现在我使用psql -U <user> <db> 连接到数据库并粘贴之前失败的CREATE INDEX 命令...创建索引没有任何问题。
我尝试过的一些事情:
- 仅使用
--schema-only转储结构会创建一个可以正常导入的转储。仅当至少有一行作为转储的一部分插入时才会出现此问题。 - 我倾向于排除所有者/权限的原因,因为我使用
-O创建转储。 - 此特定索引已有多年历史,直到最近,类似的转储都运行良好。因此,它可能与升级到 Postgres 10.3 有关。但是,我没有简单的方法来测试旧版本的转储,因为它不向下兼容。
知道这里发生了什么吗?提前致谢!
【问题讨论】:
标签: postgresql pg-dump postgresql-10