Pg_hba.conf'a giden yolu kabuktan nasıl bulurum?


101

Pg_hba.conf 'a giden yolu kabuktan almak istiyorum. Yol PostgreSQL sürümleri arasında değişir. Örneğin, 8,4 ve 9,1 için:

/etc/postgresql/8.4/main/pg_hba.conf
/etc/postgresql/9.1/main/pg_hba.conf

pg_configKomutu denedim ama bu bilgiyi içermiyor gibi görünüyor.

Bu, açılış için tek tip bir komut pg_hba.confve düzenleme için diğer PostgreSQL yapılandırma dosyalarını kullanabilirim.

Ben bash kullanıyorum.


1
Pg_hba.conf dosyasını bulmaya ne dersin?
Pramod

1
@Podod Etrafta onlarca yalan olabilir. Hangisinin Postgres tarafından kullanıldığını bilmek istersen ne yapmalıyım?
Kanama Parmakları

@BeedingFingers Kurulumunuza bağlı olarak, muhtemelen erişim zamanına göre filtre uygulayabilirsiniz. find / -name pg_hba.conf -amin -5(sunucu son 5 dakika içinde yeniden başlatıldıysa; -atimedaha uzun süre önce yeniden başlatıldıysa değiştirilecek kadar kolay ). Veya değişim zamanından daha yeni bir erişim süresine göre filtreleme yapabilir veya diğer zamana bağlı seçeneklerden birini belirleyebilirsiniz ... ( lsof | grep pg_hba.confSunucunun çalışması sırasında filtrelemeye rağmen ).
Parthian Shot,

Yanıtlar:


151

pg_configcompliation bilgileri için, uzantıların ve istemci programlarının PostgreSQL ile derleme ve bağlantı kurmalarına yardımcı olmak içindir. Makinedeki aktif PostgreSQL örnekleri, sadece ikili dosyalar hakkında hiçbir şey bilmiyor.

pg_hba.confPg'nin nasıl takıldığına bağlı olarak başka yerlerde de görünebilir. Standart konumdur pg_hba.confdahilinde data_directory(içinde olabilir veritabanının /home, /var/lib/pgsql, /var/lib/postgresql/[version]/, /opt/postgres/istedikleri yerde ancak kullanıcılar ve paketleyiciler koyabilirsiniz, vs vs vs). Ne yazık ki.

Bulmanın tek geçerli yolu pg_hba.conf, çalışan bir PostgreSQL örneğine nerede olduğunu pg_hba.confsormak veya sysadmin'e nerede olduğunu sormaktır. Datadir'in nerede olduğunu sormaya ve ayrıştırmaya bile güvenemezsiniz, postgresql.confçünkü bir init betiği Pg'yi -c hba_file=/some/other/pathbaşlatırken olduğu gibi bir paramdan geçebilir .

Yapmak istediğin şey PostgreSQL'e sormak:

SHOW hba_file;

Bu komut bir süper kullanıcı oturumunda çalıştırılmalıdır, bu nedenle kabuk komut dosyası yazmak için şöyle bir şey yazabilirsiniz:

psql -t -P format=unaligned -c 'show hba_file';

ve çevre değişkenlerini ayarlamak PGUSER, PGDATABASEvs bağlantısı doğru olduğundan emin olmak için.

Evet, bu bir miktar tavuk ve yumurta problemidir, çünkü kullanıcı bağlantı kuramazsa (örneğin, düzenlemeyi değiştirdikten sonra pg_hba.conf) pg_hba.confdüzeltmek için bulamazsınız .

Diğer bir seçenek de pskomutun çıktısına bakmak ve postmaster veri dizini argümanının -Dburada görülebilir olup olmadığını görmek.

ps aux  | grep 'postgres *-D'

çünkü pg_hba.confveri dizininde olacaktır (eğer Debian / Ubuntu'da veya bazı türevlerde değilseniz ve paketlerini kullanmıyorsanız).

Debian / Ubuntu paketlerinden kurulu PostgreSQL ile özellikle Ubuntu sistemlerini hedefliyorsanız, biraz daha kolaylaşır. Elde derlenmiş bir kaynaktan initdbkendi Pd'leri için verdikleri bir Pg ile veya / opt, vb. İçerisine yüklenen bir EnterpriseDB Pg ile uğraşmak zorunda değilsiniz pg_wrapper. Debian / Ubuntu çoklu sürüm Pg PostgreSQL kullanan yöneticisi, komut gelen .pg_lsclusterspg_wrapper

Bağlanamıyorsanız (Pg çalışmıyorsa veya pg_hba.confbağlanmak için düzenlemeniz gerekiyor ), pg_hba.confdosyaları aramak zorundasınız . Mac ve Linux'ta böyle bir şey sudo find / -type f -name pg_hba.confolacak. Ardından, PG_VERSIONeğer birden fazla varsa, doğru PostgreSQL sürümü olduğundan emin olmak için dosyayı aynı dizinde kontrol edin . (Eğer pg_hba.confiçindedir /etc/, bu görmezden, bunun yerine üst dizin adı). Aynı PostgreSQL sürümü için birden fazla veri dizininiz varsa, veritabanı boyutuna bakmanız gerekir, düzenlemekte olduğunuz yerde psveri dizini -Dargümanının eşleşip eşleşmediğini görmek için çalışan postgres komut satırını kontrol edin .


Bu 9.3 için geçerli olmayabilir, alıyorum: psql: invalid port number: "format=unaligned"Bu psql komutunu çalıştırdığımda.
jcollum

@jcollum Nope, sadece bir yazım hatası. -Phayır -p. Sabit.
Craig Ringer,

Birden fazla PostgreSQL sürümünün kurulu olması durumunda işe yarar.
bonh

Postges'in bunu standartlaştırması için herhangi bir umut var mı? Bu kurulum baş ağrıları ile çok yardımcı olur ...
Scott Skiles

@ScottSkiles PostgreSQL bunu kontrol etmiyor, hepsinin nerede olması gerektiğine dair güçlü (ve farklı) fikirlere sahip olan paketlere ve distribütörlere kalmış.
Craig Ringer

21

Bu nasıl yaparım:

john@host:~$ ls /etc/postgresql
9.1
john@host:~$ sudo vim /etc/postgresql/9.1/main/pg_hba.conf

Yol böyle olduğundan: /etc/postgresql/[VERSION]/main/pg_hba.conf


2

Aşağıdaki yapılandırma dosyaları algılama için kullanıyorum:

$(ls /etc/postgresql/*/main/pg_hba.conf)
$(ls /etc/postgresql/*/main/postgresql.conf)

1

pg_hba.confVarsayılan görsel düzenleyicinizle (vim, emacs, nano, joe, vb.) Doğru olanı düzenlemek:

$VISUAL /etc/postgresql/$(ls /etc/postgresql)/main/pg_hba.conf



-2

Dosyanın nerede olduğunu bilmek için şunu yazın:

pg_lsclusters

Pg_hba.conf dosyasını güncellemek istiyorsanız aşağıdaki komutu verin: $ sudo nano /etc/postgresql/9.1/main/pg_hba.conf
nirvanastack 14:13

-bash: pg_lsclusters: komut bulunamadı
Mona Jalal
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.