我正在用pg_dump -O -U <user> <db> >dump.sql转储一个大型数据库。
以下是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创建转储。知道这是怎么回事吗?提前谢谢一堆人!
发布于 2018-05-03 14:49:18
这是因为在最新的public点版本中与PostgreSQL模式有关的安全修复。
要么更改函数,使其引用hstore类型及其模式:public.hstore,要么将SET search_path = public添加到CREATE FUNCTION语句中。
要对hstore运算符->进行限定,可以替换
element -> key使用
element OPERATOR(public.->) key其他运营商也是如此。
https://stackoverflow.com/questions/50157849
复制相似问题