" =>"附近的语法错误当运行pg_upgrade 9.4到9.5时

时间:2016-07-31 17:29:44

标签: postgresql upgrade pg-upgrade

由于以下错误消息,我无法将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。有办法解决这个问题吗?

3 个答案:

答案 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错误!