แก้ไข: psql: ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว



ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา

PostgreSQL ส่งเสริมตัวเองว่าเป็นแพลตฟอร์มแอปพลิเคชันฐานข้อมูลโอเพ่นซอร์สที่ทันสมัยที่สุดและ Debian Linux มีแพ็คเกจมากมายที่ทำให้ซับซ้อนยิ่งขึ้น นอกจากนี้คุณยังสามารถค้นหาแพ็กเกจจำนวนเรือสำหรับ PostgreSQL ได้หากคุณกำลังทำงานกับ Ubuntu Server หรือ Ubuntu สปินต่างๆเนื่องจากเป็นไปตามแกนหลักของ Debian ความซับซ้อนและการพัฒนาระดับนี้ทำให้“ ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์” และคำเตือน“ ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว” ซึ่งน่ารำคาญกว่ามาก



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



การแก้ไข PostgreSQL ไม่สามารถเชื่อมต่อกับข้อผิดพลาดของเซิร์ฟเวอร์

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



คุณอาจพบว่าสิ่งนี้ทำให้ทุกอย่างหายไป มิฉะนั้นคุณอาจได้รับบรรทัดที่อ่านว่า“ psql: ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว” ซึ่งหมายความว่าคุณมีปัญหาในการอนุญาต หากคุณได้รับข้อความแสดงข้อผิดพลาดนี้คุณจะได้รับข้อความอื่น ๆ ที่พ่นออกมาเช่นกัน

ตรวจสอบสถานะการบริการหากคุณได้รับข้อความนี้เพื่อให้แน่ใจว่าโหลดโมดูลแล้ว ควรจะเป็น แต่ถ้าไม่ใช่คุณอาจต้องการเริ่มต้นใหม่ หากคุณได้รับข้อความว่า“ Loaded: loaded (/lib/systemd/system/postgresql.service; enable)” แสดงว่าข้อความนั้นกำลังทำงานอยู่ ลอง sudo service postgresql เริ่มต้นใหม่ เพียงแค่ทำการรีสตาร์ทสั้น ๆ และดูว่าแก้ไขอะไรได้หรือไม่ โดยปกติจะไม่เป็นเช่นนั้น แต่ก็น่าจะลองดูก็ได้




สมมติว่ามันไม่ได้ช่วยให้เข้าไปดูบันทึกของ PostgreSQL เพื่อค้นหาข้อผิดพลาด ในกรณีที่ไม่น่าจะเกิดขึ้นคุณพบบางอย่างเกี่ยวกับข้อผิดพลาดของแพ็คเกจแสดงว่าคุณอาจขาดโมดูล SQL ตัวใดตัวหนึ่ง โดยปกติแล้วนี่ไม่ใช่สาเหตุของปัญหาเหล่านี้ แต่อย่างน้อยก็ไม่เจ็บเลยที่จะได้ดู เป็นไปได้มากกว่าที่คุณจะเจอสิ่งที่เตือนคุณว่า“ สิทธิ์ควรเป็น u = rwx (0700)” และ

ว่า“ ไดเร็กทอรีข้อมูล“ /var/lib/postgresql/9.6/main” มีการเข้าถึงแบบกลุ่มหรือทั่วโลก” แม้ว่าคุณอาจเห็นหมายเลขเวอร์ชันที่แตกต่างกันขึ้นอยู่กับเซิร์ฟเวอร์ SQL ที่คุณใช้งานอยู่

เนื่องจาก Debian และการแจกแจงที่คล้ายกันคาดหวังว่าผู้ใช้และกลุ่ม postgres จะควบคุมไดเรกทอรีเหล่านี้ด้วยสิทธิ์ 0700 และไฟล์ทั้งหมดผ่านสิทธิ์ 0600 เพื่อความปลอดภัย สิ่งที่คุณต้องทำคือรันคำสั่งต่อไปนี้ที่เทอร์มินัลเพื่อแก้ไขสิทธิ์:

sudo chown -R postgres: postgres /var/lib/postgresql/9.6/ && sudo chmod -R u = rwX, go = /var/lib/postgresql/9.6/

โปรดทราบว่าควรเป็น X ตัวพิมพ์ใหญ่และไม่ใช่ x ตัวพิมพ์เล็กทั่วไปที่คุณอาจคุ้นเคยมากกว่าเนื่องจากวิธีการเฉพาะที่คุณต้องการตั้งค่าตัวเลือกการอนุญาตไฟล์เหล่านี้ ในขณะที่คุณต้องการการเข้าถึงรูทเพื่อทำสิ่งนี้การรวมเครื่องหมาย sudo ทั้งสองนี้ควรจะมากเกินพอที่จะให้สิทธิ์ที่เหมาะสมกับตัวเองเมื่อใช้งานในฐานะผู้ใช้ทั่วไป สิ่งนี้มีความสำคัญเนื่องจาก Ubuntu และการใช้งาน Linux ต่างๆแยกออกจาก Ubuntu แฮชบัญชีรูทหลักดังนั้นคุณต้องทำสิ่งต่างๆด้วยวิธีนี้

เมื่อคำสั่งนี้เสร็จสิ้นคุณสามารถเริ่มบริการใหม่ได้อีกครั้งโดย sudo service postgresql เริ่มต้นใหม่ จากเทอร์มินัลและคุณไม่ควรมีข้อผิดพลาดในครั้งนี้ หากคุณต้องดูบันทึกคำเตือนเกี่ยวกับปัญหาการอนุญาตก็จะไม่มีอีกต่อไปเช่นกัน

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

อ่าน 3 นาที