由于以下错误消息,我无法将postgresql服务器从9.4升级到9.5:
pg_restore: creating OPERATOR "public.->"
pg_restore: creating OPERATOR "public.<@"
pg_restore: creating OPERATOR "public.=>"
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 1617; 2617 17937 OPERATOR => william
pg_restore: [archiver (db)] could not execute query: ERROR: syntax error at or near "=>"
LINE 1: CREATE OPERATOR => (
^
Command was: CREATE OPERATOR => (
PROCEDURE = "tconvert",
LEFTARG = "text",
RIGHTARG = "text"
);
我无法通过谷歌搜索找到任何相关内容。我能找到的最相关的东西就是那个用旧版本的hstore遇到这个问题的人,并且修复不清楚。
我在Mac上使用自制软件。我会解决pg_dumpall的问题,但我不能再运行了,因为9.4二进制文件在升级后加载了9.5的libs。有办法解决这个问题吗?
答案 0 :(得分:1)
这是预期的,请参阅release notes for PostgreSQL 9.5:
允许
=>
在函数调用中指定命名参数(Pavel Stehule)以前只能使用
:=
。这需要消除=>
成为用户定义的运算符的可能性。自PostgreSQL 9.0以来,用户定义的=>
运算符的创建一直在发出警告。
您必须为运营商使用其他名称。没有办法解决PostgreSQL的问题。
可能是您的问题是从未迁移到扩展程序的hstore
contrib模块的旧安装。在这种情况下,您可以尝试在旧数据库中升级 之前导出,如下所示:
CREATE EXTENSION hstore FROM unpackaged;
这将摆脱已被弃用很长时间的=>
运算符。您必须更改依赖它的所有应用程序代码。
答案 1 :(得分:1)
其他解决方案要么不是选项,要么不起作用 对我有用的解决方案是:
ALTER EXTENSION hstore UPDATE TO '1.1';
来源:https://www.postgresql.org/message-id/22170.1457479307%40sss.pgh.pa.us
答案 2 :(得分:0)
不是一个完整的解决方案,但最终我恢复到以前的版本,并使用pg_dumpall备份我的数据库并在新版本中重新加载它们,完全忘记了携带已经失效的运营商。在自制软件中,这就像更改符号链接一样简单:
cd /usr/local/lib
rm postgresql
ln -sv ../../Cellar/postgresql/9.4.5_2/lib/postgresql .
/usr/local/Cellar/postgresql/9.4.5_2/bin/pg_ctl -D /usr/local/var/postgres -l logfile start # start old cluster
/usr/local/Cellar/postgresql/9.4.5_2/bin/pg_dumpall > backup.sql
/usr/local/Cellar/postgresql/9.4.5_2/bin/pg_ctl -D /usr/local/var/postgres -l logfile stop # stop old cluster
rm postgresql
ln -sv ../../Cellar/postgresql/9.5.3/lib/postgresql .
我从https://kkob.us/2016/01/09/homebrew-and-postgresql-9-5/
获取的其余升级过程这次加载数据只是psql < backup.sql
没有hstore错误!