我正在倾销一个大型数据库pg_dump -O -U <user> <db> >dump.sql
。
这是 dump.sql 的要点,所有无关的东西都被剥离了。
使用 将转储导入另一个 Postgres 实例(相同设置)时,第147 行psql -f dump.sql -U <user> <db>
发生以下错误:CREATE INDEX
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 有关。但是,我没有简单的方法来测试旧版本的转储,因为它不向下兼容。
知道这里发生了什么吗?提前致谢!