postgresql พอร์ตสับสน 5433 หรือ 5432?


128

ฉันติดตั้ง postgresql บน OSX แล้ว เมื่อฉันเรียกใช้ psql ฉันจะได้รับ

$ psql
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5433"?

อย่างไรก็ตามจาก / etc / services

postgresql      5432/udp    # PostgreSQL Database
postgresql      5432/tcp    # PostgreSQL Database
#                          Tom Lane <tgl@sss.pgh.pa.us>
pyrrho          5433/tcp    # Pyrrho DBMS
pyrrho          5433/udp    # Pyrrho DBMS

5433 ถูกครอบครองโดย pyrrho, 5432 ถูกกำหนดให้กับ pg ฉันสามารถเชื่อมต่อกับ

psql -p 5432

แต่ทำไม psql ถึงคิดว่าเป็น 5433 และฉันจะทำให้ psql ดูถูกต้องตามค่าเริ่มต้นได้อย่างไร


5
ตรวจสอบว่าPGPORTมีการกำหนดตัวแปรสภาพแวดล้อมหรือไม่: postgresql.org/docs/current/static/libpq-envars.html
a_horse_with_no_name

คำตอบ:


187

/etc/servicesเป็นเพียงคำแนะนำเท่านั้นเป็นรายชื่อพอร์ตที่รู้จักกันดี ไม่ได้หมายความว่ามีสิ่งใดกำลังทำงานอยู่บนพอร์ตนั้นจริงหรือบริการที่ระบุชื่อจะทำงานบนพอร์ตนั้น

ในกรณีของ PostgreSQL เป็นเรื่องปกติที่จะใช้พอร์ต 5432 หากมี หากไม่เป็นเช่นนั้นโปรแกรมติดตั้งส่วนใหญ่จะเลือกพอร์ตว่างถัดไปโดยปกติคือ 5433

คุณสามารถดูสิ่งที่กำลังทำงานอยู่โดยใช้netstatเครื่องมือ (มีให้ใน OS X, Windows และ Linux โดยมีไวยากรณ์บรรทัดคำสั่งที่แตกต่างกันไปทั้งสาม)

สิ่งนี้มีความซับซ้อนมากขึ้นในระบบ MacOS X โดยความยุ่งเหยิงที่น่ากลัวของแพ็คเกจ PostgreSQL ที่แตกต่างกัน - PostgreSQL เวอร์ชันเก่าของ Apple ที่สร้างขึ้นในระบบปฏิบัติการ, Postgres.app, Homebrew, Macports, ตัวติดตั้ง EnterpriseDB เป็นต้น

สิ่งที่เกิดขึ้นคือผู้ใช้ติดตั้ง Pg และเริ่มเซิร์ฟเวอร์จากแพ็คเกจเดียว แต่ใช้psqlและlibpqไคลเอนต์จากบรรจุภัณฑ์อื่น โดยทั่วไปสิ่งนี้จะเกิดขึ้นเมื่อพวกเขาใช้ Postgres.app หรือ homebrew Pg และเชื่อมต่อกับpsqlที่มาพร้อมกับระบบปฏิบัติการ บางครั้งสิ่งเหล่านี้ไม่เพียง แต่มีพอร์ตเริ่มต้นที่แตกต่างกัน แต่ Pg ที่มาพร้อมกับ Mac OS X มีเส้นทางซ็อกเก็ต unix เริ่มต้นที่แตกต่างกันดังนั้นแม้ว่าเซิร์ฟเวอร์จะทำงานบนพอร์ตเดียวกัน แต่ก็จะไม่ฟังซ็อกเก็ต Unix เดียวกัน

ผู้ใช้ Mac ส่วนใหญ่สามารถแก้ไขปัญหานี้ได้โดยใช้ tcp / ip กับpsql -h localhostไฟล์. psql -h localhost -p 5433นอกจากนี้คุณยังสามารถระบุพอร์ตถ้าจำเป็นต้องใช้เช่น คุณอาจมีกรณี PostgreSQL ทำงานหลายเพื่อให้แน่ใจว่าคุณกำลังเชื่อมต่อกับหนึ่งที่เหมาะสมโดยใช้และselect version()SHOW data_directory;

คุณยังสามารถระบุไดเร็กทอรีซ็อกเก็ต unix; ตรวจสอบunix_socket_directoriesการตั้งค่าของอินสแตนซ์ PostgreSQL คุณต้องการที่จะเชื่อมต่อและระบุว่ามีการเช่นpsql -hpsql -h /tmp

วิธีแก้ปัญหาที่สะอาดกว่าคือการแก้ไขระบบของคุณPATHเพื่อให้psqlและlibpqเชื่อมโยงกับ PostgreSQL ที่คุณใช้งานอยู่จริงคือสิ่งที่พบเป็นอันดับแรกในไฟล์PATH. รายละเอียดนั้นขึ้นอยู่กับเวอร์ชัน Mac OS X ของคุณและแพ็คเกจ Pg ที่คุณติดตั้งไว้ ฉันไม่ได้ใช้ Mac และไม่สามารถให้รายละเอียดเพิ่มเติมในด้านนั้นได้โดยไม่ต้องใช้เวลามากกว่าที่มีอยู่ในปัจจุบัน


24

คำตอบด่วนบน OSX ตั้งค่าตัวแปรสภาพแวดล้อมของคุณ

>export PGHOST=localhost

>export PGPORT=5432

หรือสิ่งที่คุณต้องการ


16

พอร์ตเริ่มต้นของ Postgres มักจะกำหนดค่าไว้ใน:

sudo vi /<path to your installation>/data/postgresql.conf

บน Ubuntu อาจเป็น:

sudo vi /<path to your installation>/main/postgresql.conf

ค้นหาportในไฟล์นี้


บน Mac OSX ที่มี BigSQL distro อยู่ที่นี่:~/PostgreSQL/data/pg96
Shane

7

ขอขอบคุณที่@a_horse_with_no_name 's ความคิดเห็นผมเปลี่ยนนิยามของฉันไป PGPORT 5432 ใน pg_env.sh นั่นช่วยแก้ปัญหาให้ฉันได้ ฉันไม่รู้ว่าทำไม postgres ถึงตั้งเป็น 5433 ในตอนแรกเมื่อโฮสต์บริการที่ 5432


7

ดูเหมือนว่าสาเหตุทั่วไปประการหนึ่งที่เกิดขึ้นคือหากคุณติดตั้ง PostgreSQL เวอร์ชันใหม่โดยไม่หยุดบริการของการติดตั้งที่มีอยู่ นี่เป็นอาการปวดหัวของฉันโดยเฉพาะเช่นกัน ก่อนติดตั้งหรืออัปเกรดโดยเฉพาะบน OS X และใช้โปรแกรมติดตั้งแบบคลิกเดียวจาก Enterprise DB ตรวจสอบสถานะของการติดตั้งเก่าก่อนดำเนินการต่อ


ใช่เราติดตั้ง postgresql-9.5 เมื่อติดตั้ง 9.4 แล้วดังนั้น 9.5 จึงเลือก 5433 เป็นพอร์ตเริ่มต้น
vikingsteve

ฉันใช้ 5432 & 5433 มานานแล้วฉันเคยเห็น 5436 แต่ไม่รู้ว่านั่นเป็นเพียงความคิดสร้างสรรค์ของใครบางคนหรือค่าเริ่มต้นบางอย่างใน os-es ที่แตกต่างกัน
มาร

3

ฉันพบปัญหานี้เช่นกันมันลงเอยด้วยการที่ฉันมีเซิร์ฟเวอร์ postgres สองเครื่องที่ทำงานในเวลาเดียวกัน ฉันถอนการติดตั้งหนึ่งในนั้นและเปลี่ยนพอร์ตกลับเป็น 5432 และใช้งานได้ดีในขณะนี้


2

สำหรับฉันในPgAdmin 4บนMac OS High Sierraคลิกฐานข้อมูลPostrgreSQL10ภายใต้เซิร์ฟเวอร์ในคอลัมน์ด้านซ้ายจากนั้นแท็บคุณสมบัติแสดง5433เป็นพอร์ตภายใต้การเชื่อมต่อ (ฉันไม่รู้ว่าเพราะอะไรฉันเลือก 5432 ระหว่างการติดตั้ง) อย่างไรก็ตามฉันคลิกไอคอนแก้ไขภายใต้แท็บคุณสมบัติเปลี่ยนเป็น5432บันทึกและแก้ไขปัญหาได้ ไปคิด


ทั้งหมดนี้ช่วยให้คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ที่รันบน 5432 อยู่แล้วซึ่งเป็นสาเหตุที่คุณสามารถเชื่อมต่อได้หลังจากทำเช่นนั้น เซิร์ฟเวอร์กำลังทำงานบน 5432 ต่อการติดตั้งของคุณตามที่คุณระบุไว้อย่างถูกต้อง
เชน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.