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 ที่คอมไพล์จากแหล่งข้อมูลว่ามีใครบางคนเป็นแหล่งข้อมูลสำหรับใช้ในบ้านหรือการติดตั้ง EnterpriseDB Pg ใน / opt ฯลฯ คุณสามารถถาม pg_wrapper, Debian / Ubuntu หลายแห่ง -version Pg manager โดยที่ PostgreSQL กำลังใช้คำสั่ง pg_lsclusters จาก pg_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 อาร์กิวเมนต์ที่ตรงกับที่คุณแก้ไขหรือไม่ ฯลฯ .
/ubuntu/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711