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.