ฉันจะหาเส้นทางไปยัง 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?
Pramod

1
@Pramod อาจมีหลายสิบคนนอนอยู่รอบ ๆ จะเกิดอะไรขึ้นถ้าคุณต้องการทราบว่า Postgres หนึ่งในนั้นกำลังใช้งานอยู่
นิ้วเลือดออก

@BleedingFingers ขึ้นอยู่กับการตั้งค่าของคุณคุณอาจจะกรองตามเวลาเข้าถึง find / -name pg_hba.conf -amin -5(ถ้าเซิร์ฟเวอร์รีสตาร์ทใน 5 นาทีที่ผ่านมาง่ายพอที่จะเปลี่ยนเป็น-atimeถ้ามันถูกรีสตาร์ทครั้งล่าสุดเมื่อนานกว่า) หรือคุณสามารถกรองตามเวลาเข้าถึงที่ใหม่กว่าเปลี่ยนเวลาหรือหนึ่งในตัวเลือกอื่น ๆ ตามเวลา ... (แม้ว่าการกรองโดยlsof | grep pg_hba.confในขณะที่เซิร์ฟเวอร์ทำงานอยู่ไม่ทำงาน)
คู่ปรับ Shot

คำตอบ:


151

pg_configใช้สำหรับข้อมูลการคอมไพล์เพื่อช่วยให้ส่วนขยายและโปรแกรมไคลเอนต์รวบรวมและเชื่อมโยงกับ PostgreSQL มันไม่รู้อะไรเลยเกี่ยวกับอินสแตนซ์ PostgreSQL ที่ใช้งานอยู่บนเครื่องเพียงไบนารี

pg_hba.confสามารถปรากฏได้ในหลาย ๆ ที่ทั้งนี้ขึ้นอยู่กับการติดตั้ง Pg สถานที่ตั้งมาตรฐานคือpg_hba.confภายในdata_directoryของฐานข้อมูล (ซึ่งอาจจะอยู่ใน/home, /var/lib/pgsql, /var/lib/postgresql/[version]/, /opt/postgres/ฯลฯ ฯลฯ ฯลฯ ) แต่ผู้ใช้และผู้ผลิตบรรจุภัณฑ์สามารถวางไว้ที่ใดก็ตามที่พวกเขาต้องการ น่าเสียดาย.

วิธีที่ถูกต้องในการค้นหาpg_hba.confคือถามอินสแตนซ์ของ PostgreSQL ที่กำลังทำงานpg_hba.confอยู่หรือถาม sysadmin คุณไม่สามารถเชื่อใจได้ว่าถามว่า datadir อยู่ที่ไหนและทำการแยกวิเคราะห์postgresql.confเพราะสคริปต์ init อาจส่งผ่านพารามิเตอร์เช่น-c hba_file=/some/other/pathเมื่อเริ่มต้น Pg

สิ่งที่คุณต้องการทำคือถาม PostgreSQL:

SHOW hba_file;

คำสั่งนี้จะต้องทำงานในเซสชัน superuser ดังนั้นสำหรับเชลล์สคริปต์คุณอาจเขียนสิ่งที่ชอบ:

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จะอยู่ในไดเรกทอรีข้อมูล (นอกเสียจากว่าคุณจะใช้ Debian / Ubuntu หรือใช้อนุพันธ์และใช้แพ็คเกจ)

หากคุณกำหนดเป้าหมายเฉพาะระบบ Ubuntu ที่ติดตั้ง PostgreSQL จากแพ็คเกจ Debian / Ubuntu มันจะง่ายขึ้นเล็กน้อย คุณไม่ต้องจัดการกับ Pg ที่คอมไพล์จากแหล่งที่ใครบางคนinitdb'ดาต้าดาต้าสำหรับในบ้านของพวกเขาหรือการติดตั้ง EnterpriseDB Pg ใน / opt ฯลฯ คุณสามารถถามpg_wrapperPg Debian / Ubuntu หลายรุ่น ผู้จัดการที่ PostgreSQL ใช้คำสั่งจากpg_lsclusterspg_wrapper

หากคุณไม่สามารถเชื่อมต่อได้ (Pg ไม่ทำงานหรือคุณต้องแก้ไขpg_hba.confเพื่อเชื่อมต่อ) คุณจะต้องค้นหาระบบpg_hba.confไฟล์ บน Mac และ Linux sudo find / -type f -name pg_hba.confจะทำอะไรบางอย่าง จากนั้นตรวจสอบPG_VERSIONไฟล์ในไดเรกทอรีเดียวกันเพื่อให้แน่ใจว่าเป็นรุ่น PostgreSQL ที่ถูกต้องหากคุณมีมากกว่าหนึ่ง (หากpg_hba.confอยู่ใน/etc/ ให้ข้ามสิ่งนี้เป็นชื่อไดเรกทอรีหลักแทน) หากคุณมีไดเรกทอรีข้อมูลมากกว่าหนึ่งรายการสำหรับรุ่น PostgreSQL เดียวกันคุณจะต้องดูขนาดฐานข้อมูลตรวจสอบบรรทัดคำสั่งของ postgres ที่รันอยู่psเพื่อดูว่า-Dอาร์กิวเมนต์ของไดเรกทอรีข้อมูลตรงกับที่คุณแก้ไขหรือไม่เป็นต้น


สิ่งนี้อาจไม่ถูกต้องสำหรับ 9.3 ฉันได้รับ: psql: invalid port number: "format=unaligned"เมื่อฉันรันคำสั่ง psql
jcollum

@jcollum Nope เพียงแค่พิมพ์ผิด ไม่-P -pแก้ไขแล้ว.
Craig Ringer

นี่เป็นคำตอบเดียวที่ใช้ได้ถ้าคุณติดตั้ง PostgreSQL มากกว่าหนึ่งรุ่น
bonh

มีความหวังใด ๆ สำหรับ Postges ที่จะทำให้เป็นมาตรฐานนี้ ที่จะช่วยให้การติดตั้งปวดหัวมาก ...
สก็อตต์สไกล์

@ScottSkiles PostgreSQL ไม่สามารถควบคุมได้มันขึ้นอยู่กับแพ็คเกจและผู้จัดจำหน่ายที่ทุกคนมีความคิดเห็นที่แข็งแกร่ง (และแตกต่างกัน) ในที่ที่ควรจะเป็น
Craig Ringer

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
nirvanastack

-bash: pg_lsclusters: ไม่พบคำสั่ง
Mona Jalal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.