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อาร์กิวเมนต์ของไดเรกทอรีข้อมูลตรงกับที่คุณแก้ไขหรือไม่เป็นต้น