转储无法在 hstore 列的数组上重新创建索引

Dump fails to re-create index over array of hstore column

我正在使用 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 ;
          key ALIAS FOR ;
          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 命令...索引创建没有任何问题。

我尝试过的一些事情:

知道这里发生了什么吗?提前致谢!

这是因为在 PostgreSQL 的最新点版本中对 public 架构进行了安全修复。

要么更改函数,使其引用类型 hstore 及其架构:public.hstore,要么将 SET search_path = public 添加到 CREATE FUNCTION 语句。

要对 hstore 运算符 -> 进行模式限定,您可以替换

element -> key

element OPERATOR(public.->) key

与其他运算符类似。