运行 pg_upgrade 9.4 到 9.5 时“=>”附近的语法错误
Syntax error near "=>" when running pg_upgrade 9.4 to 9.5
由于以下错误消息,我无法将我的 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 的库。有解决办法吗?
这是预期的,请参阅 release notes for PostgreSQL 9.5:
Allow =>
to specify named parameters in function calls (Pavel Stehule)
Previously only :=
could be used. This requires removing the possibility for =>
to be a user-defined operator. Creation of user-defined =>
operators has been issuing warnings since PostgreSQL 9.0.
您必须为接线员使用不同的名称。没有破解 PostgreSQL 的解决方法。
您的问题可能是 hstore
contrib 模块的旧安装从未迁移到扩展。在这种情况下,您可以尝试在 旧数据库 之前 像这样导出之前升级它:
CREATE EXTENSION hstore FROM unpackaged;
这将摆脱长期弃用的 =>
运算符。您必须更改所有依赖它的应用程序代码。
不是一个完整的解决方案,但最后我恢复到以前的版本并使用 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 错误!
其他解决方案要么不是选项,要么不起作用。
对我有用的解决方案是:
ALTER EXTENSION hstore UPDATE TO '1.1';
来源:https://www.postgresql.org/message-id/22170.1457479307%40sss.pgh.pa.us
由于以下错误消息,我无法将我的 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 的库。有解决办法吗?
这是预期的,请参阅 release notes for PostgreSQL 9.5:
Allow
=>
to specify named parameters in function calls (Pavel Stehule)Previously only
:=
could be used. This requires removing the possibility for=>
to be a user-defined operator. Creation of user-defined=>
operators has been issuing warnings since PostgreSQL 9.0.
您必须为接线员使用不同的名称。没有破解 PostgreSQL 的解决方法。
您的问题可能是 hstore
contrib 模块的旧安装从未迁移到扩展。在这种情况下,您可以尝试在 旧数据库 之前 像这样导出之前升级它:
CREATE EXTENSION hstore FROM unpackaged;
这将摆脱长期弃用的 =>
运算符。您必须更改所有依赖它的应用程序代码。
不是一个完整的解决方案,但最后我恢复到以前的版本并使用 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 错误!
其他解决方案要么不是选项,要么不起作用。
对我有用的解决方案是:
ALTER EXTENSION hstore UPDATE TO '1.1';
来源:https://www.postgresql.org/message-id/22170.1457479307%40sss.pgh.pa.us