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.