2016-07-31 13 views
2

にpg_upgradeの9.4を実行しているとき、私は次のエラーメッセージに9.4から9.5への私のPostgreSQLサーバをアップグレードすることができません:私は何かを見つけることができませんでした近くに構文エラー「=>」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

。 (そしてバージョンを混在させるのは良い考えではありません) – wildplasser

+0

ええ、私はそれを作成していない、それは私が使用しているhstore拡張の一部です。私はバージョンを混在させていない、私はちょうど私の古いデータを9.4から9.5にアップグレードしようとしている。私が9.4を実行しようとしている唯一の理由は、9.5がインストールされているので、データを移行する他の方法を試すことです。私は本番サーバーでこれをやりたいので、実行可能な方法を見つける必要があります。 – wmakley

答えて

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のエラーではありません!

1

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; 

。それに依存するすべてのアプリケーションコードを変更する必要があります。

+0

ありがとう、私は演算子を作成していない、私は自分の手順のいずれかでそれを使用しません。私はそれがどこから来たのか、それを取り除く方法を理解していない、私はちょうど私のデータベースをアップグレードしたい。私が今までにインストールしたことのすべては、まったく新しいものです。 :( – wmakley

+0

いいえ、PostgreSQLのコアに演算子 'public。=>'はありません。古い 'hstore'のインストール時に残っている場合は、私の答えを修正しました。 –

+0

残念ながら、 "ERROR:type" hstore "does not exist"というエラーがあります。 pg_dumpallを使用して旧バージョンに戻すことで、私のアップグレードが機能します。 – wmakley

0

他の解決策はオプションでなかったか、機能しませんでした。
は私のために働いていたソリューションでした:

ALTER EXTENSION hstore UPDATE TO '1.1'; 

出典:https://www.postgresql.org/message-id/22170.1457479307%40sss.pgh.pa.usそれは ` "国民は=>。"`おそらく ` "公開" する必要があります "=>"`のように見える

関連する問題