pg_upgradeの認識されない構成パラメーター「unix_socket_directory」


13

このコマンドをpostgresユーザーとして使用して、Fedora 18でPostgresqlを9.2から9.3にアップグレードしようとしています。

$ pg_upgrade -b /bin -B /usr/pgsql-9.3/bin -d /var/lib/pgsql/data -D /var/lib/pgsql/9.3/data/ -j 2 -u postgres

ログのエラー

コマンド: "/ bin / pg_ctl" -w -l "pg_upgrade_server.log" -D "/ var / lib / pgsql / data" -o "-p 50432 -b -c listen_addresses = '' -c unix_socket_permissions = 0700 -c unix_socket_directory = '/ var / lib / pgsql' "start >>" pg_upgrade_server.log "2>&1サーバーの起動を待機しています。...FATAL:認識されない構成パラメーター" unix_socket_directory "....サーバ

コメントのa_horseで指摘されているように、そのパラメーターはunix_socket_directories9.3で(複数)に置き換えられました。しかし、開始されるサーバーのバージョンは古いものです9.2:

$ /bin/pg_ctl --version
pg_ctl (PostgreSQL) 9.2.4

何か案は?


2
そのパラメーターの名前が変更されましたunix_socket_directoriespostgresql.org/docs/current/static/release-9-3.html#AEN114343
a_horse_with_no_name

@a_horseこのコマンドは、バージョン9.2の起動を試みます。更新された質問
-Clodoaldo

ディストリビューションで使用されているパラメーターを明示的に確認するには、次のコマンドを実行しますpostgres --describe-config | grep -o 'unix_socket_director\w*'
ランドール

回答:


25

(rootとして)を実行して問題をハッキングしました。

mv /usr/bin/pg_ctl{,-orig}
echo '#!/bin/bash' > /usr/bin/pg_ctl
echo '"$0"-orig "${@/unix_socket_directory/unix_socket_directories}"' >> 
     /usr/bin/pg_ctl
chmod +x /usr/bin/pg_ctl

pg_upgrade意図したとおりに実行し、ハックを元に戻します。

mv -f /usr/bin/pg_ctl{-orig,}

問題は、pg_upgradeが、新しい「unix_socket_directories」ではなく、古い「unix_socket_directory」内のファイルを指定する引数でプログラムpg_ctrlを実行することです(2番目は複数形であることに注意してください)。このハックは、元の名前を変更/usr/bin/pg_ctl/usr/bin/pg_ctl-orig、その後、単に「unix_socket_directories」に変更「unix_socket_directory」任意の文字列ですべての引数を渡し、元にpg_ctlプログラムを呼び出すことをその場所にシェルスクリプトを作成します。

bashで、1は、文字列の一部を変更することができ、から言うbarbaz、変数に$foo使用することにより、${foo/bar/baz}(これは、変数を変更しませんのでご注意ではなく、変数の変更内容を返します)。配列を使用し${x/y/z}て、すべてのコンテンツを一度に置き換えて配列を取得することもできます。変数$@はプログラム/スクリプト/関数に渡されるすべての引数を含む配列であるため、新しいpg_ctlスクリプトはすべての引数を古いディレクトリ名から新しいものに変更して古いものを実行します。


3
これにより、Centos 7でpostgres 9.2を9.6にアップグレードすることができました。ありがとう!
サンセットジャンク

2
9.2から9.6に移行するのにとても役立ちました。本当にありがとう!この答えがなければ私が何をしたのかわかりません!
SebK

CentOSに7に9.2から9.6に行く、あまりにも私のために働いた
ガブリエル・セロン

1
bashハックの策略を説明することで、他の人が将来同様の問題に対処するのに役立つかもしれません。これはいくつかの深刻なbashのねじれです:-)
xor007

CentOS 7でPostgreSQL 9.2から10.7に移行するための完璧でエレガントなソリューション
wfgeo

5

私は同じ問題を抱えています。Fedora Repoの9.2.4からPGDG 9.3にアップグレードしていました。問題の原因は、Fedoraがパラメーターの変更をバックポートするunix_socket_directoryことですunix_socket_directorieshttps://bugzilla.redhat.com/show_bug.cgi?id=853353を参照)。

私の解決策は、再構築することでpg_upgrade、ファイルのアップデートで、ソースからcontrib/pg_upgrade/server.c:199どこpg_upgradeのサーバーバージョンのチェック:

199:       (GET_MAJOR_VERSION(cluster->major_version) < 903) ?

、私の場合、それを次のように変更します:

199:       (GET_MAJOR_VERSION(cluster->major_version) < 900) ?

(こちらのパッチファイルをご覧ください)。


なぜこれが問題を解決するのかを説明していただけますか(ソースにあまり慣れていない(私自身のような、控えめな表現に注意してください!))
-dezso

4
上記の@a_horseコメントに従って、上流のPostgreSQLはバージョン9.3でパラメーターunix_socket_directoryを変更しましたunix_socket_directories。ただし、Fedoraメンテナはそれを下位バージョンにバックポートします。したがって、pg_upgradePGD​​G(PostgreSQLグローバル開発グループ)から、YUMリポジトリは9.2.4バージョンが受け入れられることを期待しますunix_socket_directoryが、実際にはFedora YUMリポジトリからの9.2.4は受け入れますunix_socket_directories。この場合、Fedoraはバージョン9.0以降にバックポートするため、バージョン9.0以降で使用するように変更しましたunix_socket_directories
アリ・アクバル・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.