मुझे शेल से pg_hba.conf का रास्ता कैसे मिलेगा?


101

मैं शेल से pg_hba.conf का पथ प्राप्त करना चाहूंगा। पथ PostgreSQL के संस्करणों के बीच भिन्न होता है। उदाहरण के लिए, 8.4 और 9.1 के लिए:

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

मैंने pg_configकमांड की कोशिश की है , लेकिन यह इस जानकारी को शामिल नहीं करता है।

यह इतना है कि मैं pg_hba.confसंपादन के लिए खोलने और अन्य PostgreSQL कॉन्फ़िगरेशन फ़ाइलों के लिए एक समान आदेश का उपयोग कर सकता हूं ।

मैं बैश का उपयोग कर रहा हूं।


1
कैसे पता लगाएं के बारे में pg_hba.conf?
प्रमोद

1
@Pramod उनमें से दसियों झूठ बोल सकते थे। यदि आप जानना चाहते हैं कि उनमें से कौन पोस्टग्रेज द्वारा उपयोग किया जा रहा है।
रक्तस्रावी उंगलियां

@BleedingFingers आपके सेटअप पर निर्भर करता है, आप शायद पहुंच के समय को फ़िल्टर कर सकते हैं। find / -name pg_hba.conf -amin -5(यदि सर्वर को अंतिम 5 मिनट में फिर से शुरू किया गया है, -atimeतो इसे बदलने के लिए काफी आसान है यदि इसे पिछली बार एक लंबे समय से पहले पुनरारंभ किया गया था)। या आप परिवर्तन के समय की तुलना में नए एक्सेस टाइम को फ़िल्टर कर सकते हैं या अन्य समय-आधारित विकल्पों में से किसी एक को खोज सकते हैं ... (हालांकि lsof | grep pg_hba.confकिसी सर्वर के चलने पर काम नहीं करता है)।
पार्थियन शॉट

जवाबों:


151

pg_configविस्तार जानकारी के लिए है, एक्सटेंशन और क्लाइंट प्रोग्राम्स को पोस्टग्रेक्यूएल के खिलाफ संकलन और लिंक करने में मदद करने के लिए। यह मशीन पर सक्रिय PostgreSQL उदाहरण (ओं) के बारे में कुछ नहीं जानता, केवल बायनेरिज़।

pg_hba.confPg कैसे स्थापित किया गया था, इसके आधार पर कई अन्य स्थानों में दिखाई दे सकता है। मानक स्थान है pg_hba.confभीतर data_directory(जिसमें हो सकता है डेटाबेस का /home, /var/lib/pgsql, /var/lib/postgresql/[version]/, /opt/postgres/लेकिन उपयोगकर्ताओं और packagers डाल दिया जहाँ भी वे पसंद कर सकते हैं, आदि आदि आदि)। दुर्भाग्य से।

केवल मान्य तरीके खोज pg_hba.confएक चल रहे PostgreSQL उदाहरण से पूछते हैं कि यह कहाँ pg_hba.confहै, या sysadmin से पूछें कि यह कहाँ है। आप यह पूछने पर भी भरोसा नहीं कर सकते कि डेटादिर कहां है और पार्सिंग कर रहा है postgresql.confक्योंकि -c hba_file=/some/other/pathपीजी शुरू करते समय एक इनिट स्क्रिप्ट एक परम को पार कर सकती है ।

आप क्या करना चाहते हैं PostgreSQL से पूछें:

SHOW hba_file;

यह कमांड सुपरसुअर सत्र पर चलाया जाना चाहिए, इसलिए शेल स्क्रिप्टिंग के लिए आप कुछ ऐसा लिख ​​सकते हैं:

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

और वातावरण चरों सेट PGUSER, PGDATABASE, आदि सुनिश्चित करना है कि कनेक्शन सही है।

हां, यह कुछ हद तक चिकन-और-अंडे की समस्या है, जिसमें यदि उपयोगकर्ता कनेक्ट नहीं कर सकता (कहिए, एडिटिंग खराब होने के बाद pg_hba.conf) आप pg_hba.confइसे ठीक करने के लिए नहीं मिल सकते हैं ।

एक अन्य विकल्प यह है कि psकमांड के आउटपुट को देखें और देखें कि क्या पोस्टमास्टर डेटा डायरेक्टरी तर्क -Dवहां दिखाई दे रहा है, जैसे

ps aux  | grep 'postgres *-D'

चूँकि pg_hba.confडेटा निर्देशिका के अंदर होगा (जब तक कि आप डेबियन / उबंटू या कुछ व्युत्पन्न और उनके पैकेज का उपयोग नहीं कर रहे हैं)।

यदि आप विशेष रूप से उबंटू प्रणालियों को लक्षित कर रहे हैं, तो डेबियन / उबंटू संकुल से पोस्टग्रेक्यूएल के साथ स्थापित करना थोड़ा आसान हो जाता है। आपको हाथ से संकलित-स्रोत पीजी से निपटने की ज़रूरत नहीं है कि किसी के initdbघर डाट के लिए दा डातादिर, या एंटरप्राइजडीबी पीजी इन / ऑप्ट आदि स्थापित करें, आप pg_wrapperडेबियन / उबंटू मल्टी-वर्जन पीजी से पूछ सकते हैं । प्रबंधक, जहाँ से PostgreSQL कमांड का उपयोग कर रहाpg_lsclusters है pg_wrapper

यदि आप कनेक्ट नहीं कर सकते हैं (Pg नहीं चल रहा है, या आपको pg_hba.confकनेक्ट करने के लिए संपादित करने की आवश्यकता है ) आपको pg_hba.confफ़ाइलों के लिए सिस्टम को खोजना होगा । मैक और लिनक्स पर जैसे कुछ sudo find / -type f -name pg_hba.confकरेंगे। PG_VERSIONयदि आप एक से अधिक हैं, तो यह सुनिश्चित करने के लिए फ़ाइल को उसी निर्देशिका में जांचें कि यह सही PostgreSQL संस्करण है। (यदि pg_hba.confमें है /etc/, इस पर ध्यान न दें, यह मूल निर्देशिका नाम के बजाय है)। यदि आपके पास समान PostgreSQL संस्करण के लिए एक से अधिक डेटा निर्देशिका है, तो आपको डेटाबेस का आकार देखना होगा, चल रहे पोस्टग्रेज की कमांड लाइन को psयह देखने के लिए देखें कि क्या यह डेटा निर्देशिका -Dतर्क मेल खाता है जहाँ आप संपादन कर रहे हैं, आदि।


यह 9.3 के लिए मान्य नहीं हो सकता है, मुझे मिलता है: psql: invalid port number: "format=unaligned"जब मैं उस psql कमांड को चलाता हूं।
जूलम

@jcollum नहींं, बस एक टाइपो। -Pनहीं है -p। फिक्स्ड।
क्रेग रिंगर

यह एकमात्र उत्तर है जो काम करता है यदि आपके पास एक से अधिक संस्करण PostgreSQL स्थापित हैं।
bon

क्या डाकघरों को इसके मानकीकरण की कोई उम्मीद है? स्थापना सिरदर्द के साथ बहुत मदद मिलेगी ...
स्कॉट स्किल्स

@ScottSkiles PostgreSQL इसे नियंत्रित नहीं करता है, यह उन पैकेजों और वितरकों पर निर्भर है, जिनके पास सभी मजबूत (और अलग-अलग) राय हैं कि यह कहां होना चाहिए।
क्रेग रिंगर

21

यह मेरा इसे करने का तरीका है:

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

चूंकि रास्ता इस तरह है: /etc/postgresql/[VERSION]/main/pg_hba.conf


2

मैं कॉन्फ़िगर फ़ाइलों का पता लगाने के लिए निम्नलिखित का उपयोग कर रहा हूं:

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

1

pg_hba.confअपने डिफ़ॉल्ट विज़ुअल एडिटर (vim, emacs, nano, joe, आदि) के साथ सही संपादन करना जितना आसान है:

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



-2

यह जानने के लिए कि फ़ाइल कहाँ टाइप की गई है:

pg_lsclusters

यदि आप pg_hba.conf फ़ाइल को अपडेट करना चाहते हैं, तो निम्न आदेश जारी करें: $ sudo nano /etc/postgresql/9.1/main/pg_hba.conf
nirvanasta STR

-बाश: pg_lsclusters: कमांड नहीं मिली
मोना जलाल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.