我正在使用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
创建转储。知道这里发生了什么吗?提前一堆谢谢!
答案 0 :(得分:1)
这是因为PostgreSQL最新版本中有关public
架构的安全修复。
更改函数,使其引用hstore
类型及其架构:public.hstore
,或将SET search_path = public
添加到CREATE FUNCTION
语句。
要对hstore
运算符->
进行架构限定,您可以替换
element -> key
与
element OPERATOR(public.->) key
与其他运营商相似。