Saya mencoba untuk mengupgrade Postgresql dari 9.2 ke 9.3 di Fedora 18 menggunakan perintah ini sebagai pengguna postgres
$ 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
Kesalahan dalam log
perintah: "/ 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 menunggu server untuk memulai .... FATAL: parameter konfigurasi yang tidak dikenal" unix_socket_directory ".... berhenti menunggu pg_ctl: tidak dapat memulai server
Seperti yang ditunjukkan oleh a_horse di komentar bahwa parameter digantikan oleh unix_socket_directories
(jamak) di 9.3. Tetapi versi server yang dimulai adalah versi lama 9.2:
$ /bin/pg_ctl --version
pg_ctl (PostgreSQL) 9.2.4
Ada ide?
postgresql
upgrade
Clodoaldo
sumber
sumber
unix_socket_directories
: postgresql.org/docs/current/static/release-9-3.html#AEN114343postgres --describe-config | grep -o 'unix_socket_director\w*'
Jawaban:
Saya meretas masalah dengan menjalankan (sebagai root):
Jalankan
pg_upgrade
sebagaimana dimaksud, lalu urungkan retasan:Masalahnya adalah bahwa pg_upgrade mengeksekusi program pg_ctrl dengan argumen yang menentukan file dalam "unix_socket_directory" lama daripada "unix_socket_directories" yang baru (perhatikan yang kedua adalah jamak). Retas ini mengubah nama asli
/usr/bin/pg_ctl
menjadi/usr/bin/pg_ctl-orig
, dan kemudian membuat skrip shell di tempatnya yang hanya memanggil program pg_ctl asli, meneruskan semua argumen dengan string "unix_socket_directory" yang diubah menjadi "unix_socket_directories".Dalam bash, seseorang dapat mengubah bagian string, katakan dari
bar
menjadibaz
dalam variabel$foo
, dengan menggunakan${foo/bar/baz}
(perhatikan ini tidak mengubah variabel, tetapi mengembalikan konten yang dimodifikasi variabel). Array juga dapat digunakan${x/y/z}
untuk mengambil array dengan semua isinya diganti, sekaligus. Variabel$@
adalah array yang berisi semua argumen yang diteruskan ke program / skrip / fungsi, sehingga skrip pg_ctl baru mengeksekusi yang lama dengan semua argumen berubah dari nama direktori lama ke yang baru.sumber
Saya punya masalah yang sama. Saya meningkatkan dari Fedora Repo 9.2.4 ke PGDG 9.3. Sumber masalahnya adalah Fedora mendukung perubahan parameter
unix_socket_directory
keunix_socket_directories
(lihat https://bugzilla.redhat.com/show_bug.cgi?id=853353 ).Solusi saya adalah membangun kembali
pg_upgrade
dari sumber, dengan pembaruan ke filecontrib/pg_upgrade/server.c:199
tempatpg_upgrade
memeriksa versi server:, dalam kasus saya, saya mengubahnya ke:
(lihat file tambalan saya di sini ).
sumber
unix_socket_directory
untukunix_socket_directories
di versi 9.3. Namun pengelola Fedora mendukungnya ke versi yang lebih rendah. Jadi,pg_upgrade
dari PGDG (PostgreSQL Global Development Group) YUM Repository mengharapkan versi 9.2.4 menerimaunix_socket_directory
, tetapi sebenarnya 9.2.4 dari Fedora YUM Repository menerimaunix_socket_directories
. Dalam hal ini, karena Fedora memundurkannya ke versi 9.0 dan seterusnya, saya mengubahnya untuk digunakanunix_socket_directories
untuk versi> = 9.0.