pg_upgrade "unix_socket_directory" tanınmayan yapılandırma parametresi


13

Postgres kullanıcı olarak bu komutu kullanarak Fedora 18'de Postgresql 9.2'den 9.3'e yükseltmeye çalışıyorum

$ 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

Günlükteki hata

komut: "/ 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' "başlat >>" pg_upgrade_server.log "2> & 1 sunucunun başlamasını bekliyor .... FATAL: tanınmayan yapılandırma parametresi" unix_socket_directory ".... durmayı durdurdu pg_ctl: başlatılamadı sunucu

Yorumlarda a_horse'un işaret ettiği gibi , bu parametre unix_socket_directories9.3'te (çoğul) ile değiştirildi . Ancak başlatılan sunucu sürümü eskidir 9.2:

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

Herhangi bir fikir?


2
Bu parametre şu şekilde yeniden adlandırıldı unix_socket_directories: postgresql.org/docs/current/static/release-9-3.html#AEN114343
a_horse_with_no_name 18:13

@a_horse Bu komut 9.2 sürümünü başlatmaya çalışır. Güncel soruya bakın
Clodoaldo

Dağıtımınızda hangi parametrenin kullanıldığını açıkça görmek içinpostgres --describe-config | grep -o 'unix_socket_director\w*'
Randall

Yanıtlar:


25

(Kök olarak) çalıştırarak sorun kesmek:

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

İstediğiniz pg_upgradegibi çalıştırın , ardından kesmek geri alın:

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

Sorun pg_upgrade, pg_ctrl programını yeni "unix_socket_directories" yerine eski "unix_socket_directory" içindeki dosyaları belirten argümanlarla yürütmesidir (ikincinin çoğul olduğunu unutmayın). Bu kesmek orijinali yeniden adlandırır /usr/bin/pg_ctliçin /usr/bin/pg_ctl-orig, ve sonra sadece "unix_socket_directories" olarak değiştirildi herhangi dizeleri "unix_socket_directory" olan tüm argüman ileterek, orijinal pg_ctl programı çağırır onun yerine bir kabuk oluşturur.

Bash, bir bir dize bir kısmını değiştirebilir, gelen söylemek bariçin bazbir değişkene $fookullanarak, ${foo/bar/baz}(bu değişkeni değişmez almaktan çok değişkenin modifiye içeriğini döndürür). Diziler ${x/y/z}, tümü bir kerede tüm içeriği değiştirilmiş bir diziyi almak için de kullanılabilir . Değişken $@, program / script / fonksiyonuna iletilen tüm argümanları içeren bir dizidir, bu nedenle yeni pg_ctl betiği eski dizini eski dizin adından yenisine değiştirilen tüm değişkenlerle yürütür.


3
Bu gerçekten Centos 7 postgres 9.2 9.6 yükseltmek için izin verdi! Teşekkürler!
sunsetjunks

2
9.2'den 9.6'ya kadar benim için harika çalıştı. Çok teşekkürler! Bu cevap olmadan ne yapardığım hakkında bir fikrim yok
SebK

Benim için de çalıştı, Centos 7'de 9,2'den 9,6'ya kadar gitti
Gabriel Theron

1
Belki de bash hack'in hilelerini açıklamak, başkalarının gelecekte benzer sorunlarla başa çıkmasına yardımcı olabilir. Bu bazı ciddi bash büküm :-)
xor007

Mükemmel ve zarif bir çözüm, CentOS 7'de PostgreSQL 9.2'den
10.7'ye

5

Aynı problemim var. Fedora Repo'nun 9.2.4 sürümünden PGDG 9.3 sürümüne geçiyordum. Sorunun kaynağı Fedora backports parametresinin değiştirmesidir unix_socket_directoryiçin unix_socket_directories(bkz https://bugzilla.redhat.com/show_bug.cgi?id=853353 ).

Benim çözümüm yeniden inşa etmektir pg_upgradedosyaya güncelleme ile, kaynaklardan contrib/pg_upgrade/server.c:199nerede pg_upgradesunucu sürümü için kontroller:

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

, benim durumumda değiştiririm:

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

( yama dosyasına bakın ).


Bunun sorunu neden çözdüğünü açıklar mısınız?
dezso

4
Yukarıda @a_horse açıklama gereğince, memba PostgreSQL parametresini değiştirmiş unix_socket_directoryetmek unix_socket_directoriessürümü 9.3 de. Ancak Fedora bakımcısı onu daha düşük bir sürüme geri döndürüyor. Bu nedenle, pg_upgradePGDG'den (PostgreSQL Global Development Group) YUM Deposu, 9.2.4 sürümünün kabul etmesini beklemektedir unix_socket_directory, ancak aslında Fedora YUM Deposu'ndan 9.2.4'ü kabul etmektedir unix_socket_directories. Bu durumda, Fedora 9.0 sürümünden sonra geri kaydettiğinden, unix_socket_directoriessürüm> = 9.0 için kullanılacak şekilde değiştirdim .
Ali Akbar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.