ทำไม PostgreSQL 9.3 จะไม่เริ่มทำงานบน Ubuntu


13

ฉันได้ติดตั้ง PostgreSQL 9.3 สำเร็จแล้วจากที่เก็บ APT บน Ubuntu 12.04 และ 13.04 ที่รันบน VM 2 อย่างไรก็ตามฉันไม่สามารถติดตั้งบนเครื่องโฮสต์ที่ใช้ Ubuntu 12.04 ได้

ดูเหมือนว่าการติดตั้ง (ในครั้งนี้) จะใช้ได้ แต่อาจมีข้อผิดพลาดที่ฉันไม่เข้าใจ:

* No PostgreSQL clusters exist; see "man pg_createcluster"
Setting up postgresql-9.3 (9.3.0-2.pgdg12.4+1) ...
Creating new cluster 9.3/main ...
  config /etc/postgresql/9.3/main
  data   /var/lib/postgresql/9.3/main
  locale en_US.UTF-8
  port   5432
update-alternatives: using /usr/share/postgresql/9.3/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode.

ดังนั้นฉันจึงพยายามเพิ่มตัวเองเป็นผู้ใช้ PostgreSQL แต่ฉันได้รับสิ่งนี้:

createuser: could not connect to database postgres: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

ฉันไม่เห็น PostgreSQL ทำงานในการตรวจสอบระบบและไม่มีไฟล์ใน / var / run / postgresql / โฟลเดอร์ ... ว่างเปล่าทั้งหมด

แก้ไข: บน VM มีไฟล์ใน / var / run / postgresql / เรียกว่า 9.3-main.pid

ไม่มีสิ่งใดในไฟล์บันทึกของเครื่องโฮสต์ที่อยู่ / var / log / postgresql

ดังนั้น ...เกิดอะไรขึ้นที่นี่ที่ไม่ได้เกิดขึ้นใน VM ของฉัน? อย่างที่ฉันบอกไปการติดตั้งอื่น ๆ ของ VM รวมถึง PostGIS และ PGAdmin นั้นสมบูรณ์แบบ ... ไม่รู้เลยว่าทำไมเครื่องโฮสต์นี้ถึงไม่ผ่าน ...


จริง ๆ แล้วคุณมี/var/run/postgresqlไดเรกทอรีหรือไม่ ในขั้นตอนเดียวหลังจากการติดตั้งที่ประสบความสำเร็จโฟลเดอร์นั้นหายไปในเครื่องของฉัน การกำหนดค่าพูดถึงสิ่งที่เกี่ยวกับไดเรกทอรีที่ควรใช้?
Colin 't Hart

@ Colin'tHart ฉันมีไดเรกทอรีนั้น ... แต่ไม่มีอะไรในนั้น ... ใน VM ของมีไฟล์ที่สร้างชื่อ 9.3-main.pid ฉันจะหาข้อมูลการกำหนดค่าได้ที่ไหน
DPSSpatial

postgresql.conf/etc/postgresql/9.3/mainในไดเรกทอรีการตั้งค่าซึ่งตามข้างต้นคือ /var/log/postgresqlนอกจากนี้คุณควรมองในล็อกไฟล์อาจจะอยู่ใน
Colin 't Hart

@ Colin'tHart ไฟล์บันทึกว่างเปล่า ... ไฟล์กำหนดค่า - และฉันคิดว่านี่คือสิ่งที่คุณต้องการ - บอกว่า # ถ้า external_pid_file ไม่ได้ถูกตั้งค่าไว้อย่างชัดเจนจะไม่มีการเขียนไฟล์ PID เพิ่มเติม external_pid_file = '/var/run/postgresql/9.3-main.pid'
DPSSpatial

มีซ็อกเก็ตไฟล์ในไดเรกทอรีนั้นหรือเปล่าจริง ๆ
Colin 't Hart

คำตอบ:


16

การตั้งค่าตำแหน่งที่ตั้งของฉันไม่ได้รับการกำหนดค่าอย่างเหมาะสมเมื่อติดตั้ง PostgreSQL การลบและติดตั้งใหม่ไม่ได้ช่วยอะไร ฉันทำตามคำแนะนำที่นี่และนั่นก็เป็นการหลอกลวงสำหรับฉัน

ส่วนสำคัญของข้อมูลที่เชื่อมโยงทำซ้ำด้านล่าง:

ปัญหาแสดงให้เห็นว่าตัวเองในลักษณะดังต่อไปนี้:

warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
...
are supported and installed on your system.

อันแรกแก้ง่ายมากโดยการดำเนินการ:

#dpkg-reconfigure locales

... และเลือกสถานที่ที่ต้องการ

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

#pg_createcluster 9.3 main --start

(สำหรับ PostgreSQL รุ่น 9.3)

หลังจากขั้นตอนนั้น PostgreSQL เริ่มต้นอย่างไม่มีที่ติ

#/etc/init.d/postgresql start

2
ช่วยชีวิตฉันไว้. เป็นเรื่องน่าเบื่อจริง ๆ ที่การล้างและการติดตั้งใหม่ไม่ได้ช่วยแม้ว่าจะแก้ไขสถานที่แล้วก็ตาม สิ่งนี้ทำให้ฉันเสียชีวิต 2 ชั่วโมง :(
เอสเชอร์

ในกรณีที่pg_createclusterจะบอกคุณว่ากลุ่มอยู่แล้วคุณต้องการที่จะลดลงเป็นครั้งแรก (ซึ่งจะลบข้อมูลใด ๆ pg_dropcluster 9.3 mainในนั้นเพื่อให้แน่ใจว่าคุณมีการสำรองข้อมูล):
Florian Brucker

6

หวังว่าคุณจะได้แก้ไขปัญหานี้แล้ว แต่ฉันพบปัญหาที่คล้ายกันซึ่งดูเหมือนว่ามีแหล่งข้อมูลที่แตกต่างกันและบางทีประสบการณ์ของฉันอาจช่วยได้ถ้าคุณยังมีปัญหาอยู่

ปัญหาของฉันกับ 9.3 ใน Ubuntu เกี่ยวข้องกับซ็อกเก็ต dir เป็น dir ชั่วคราวใน / เรียกใช้ โดยพื้นฐานแล้วสคริปต์ init.d ควรดูแลการสร้างซ็อกเก็ต dir ใน / run / postgresql หากไม่มีอยู่ในระหว่างการดำเนินการเริ่มต้น นี่จะเป็นสถานะของสิ่งต่าง ๆ เสมอหลังจากรีบูต

อย่างไรก็ตามปัญหาคือว่าสคริปต์ init.d จะออกก่อนที่จะดำเนินการเริ่มต้นหากซ็อกเก็ต dir ไม่มีอยู่ นี่เป็นเพราะการเรียกไปยัง pg_lsclusters จะล้มเหลวโดยไม่มีซ็อกเก็ต dir ซึ่งจะป้องกันไม่ให้การดำเนินการเริ่มต้นจากการสร้างซ็อกเก็ต dir

ฉันไม่ได้คิดออกว่าทางออกที่ดีที่สุดคืออะไร แต่ถ้าฉันย้ายตรรกะสำหรับการสร้างซ็อกเก็ต dir จากการกระทำเริ่มต้นก่อนที่จะเรียกไปยัง pg_lsclusters ฉันสามารถเริ่มต้นเซิร์ฟเวอร์หลังจากรีบูตโดยไม่มีปัญหา

นี่คือส่วนของการดำเนินการเริ่มต้นที่จัดการการสร้างซ็อกเก็ต dir:

# create socket directory
if [ -d /var/run/postgresql ]; then
  chmod 2775 /var/run/postgresql
else
  install -d -m 2775 -o postgres -g postgres /var/run/postgresql
  [ -x /sbin/restorecon ] && restorecon -R /var/run/postgresql || true
fi

ฉันจะโพสต์การอัปเดตหากสาเหตุของสิ่งนี้ชัดเจนสำหรับฉันเพราะสิ่งนี้ไม่สามารถคาดหวังได้

ภาคผนวก:

ผมคิดว่าเหตุผลที่ผมทำงานเป็นปัญหานี้เป็นเพราะผมไม่ได้มีความคุ้มค่าสมการกำหนดค่าสำหรับunix_socket_directories ใน 9.2 ตัวเลือกการกำหนดค่านี้เคยเป็น unix_socket_directory ซึ่งฉันลบออกไปแทนที่จะเปลี่ยนเป็น unix_socket_directories เนื่องจากฉันตั้งค่าสำหรับ unix_socket_directories ฉันไม่ได้มีปัญหาใด ๆ กับการเริ่มต้นเซิร์ฟเวอร์


ขอบคุณ @ tdg5 !!! ฉันไม่ได้แก้ปัญหานี้ แต่ฉันคิดว่ามันติดตั้งไม่ดีหลายครั้งในเครื่องของฉัน การติดตั้งจาก PostgreSQL Apt Repository ในการติดตั้ง Ubuntu ใหม่แก้ปัญหาของฉัน ...
DPSSpatial

3
@mapBaker - ฉันได้อัปเดตการตอบกลับเพื่อระบุสาเหตุที่แท้จริงของปัญหาการเริ่มต้น PG 9.3 ในสถานการณ์เฉพาะของฉัน อาจเป็นประโยชน์สำหรับคุณเช่นกัน
tdg5

1
PG9.3 ของฉันไม่เริ่มทำงานหลังจากรีบูต การเพิ่มบรรทัด "unix_socket_directories = '/ var / run / postgresql'" ให้กับ postgresql.conf ของ 9.3 ได้แก้ไขแล้ว ขอบคุณ
alfonx

ขอบคุณ! เคยทำงานเกี่ยวกับเรื่องนี้มาระยะหนึ่งแล้วและดีใจที่ได้พบกับนักเก็ตก้อนนี้!
Serban Tanasa

3

ฉันมีปัญหาหลายประการเกี่ยวกับไฟล์ sockets ในกรณีของคุณ /var/run/postgresql/.s.PGSQL.5432

ต้องแน่ใจว่ามีไดเร็กทอรี / var / run / postgresql อยู่และสามารถเขียนได้ก่อนเริ่ม postgresql สำหรับข้อมูลเพิ่มเติมดูการสนทนานี้

เช่นเดียวกันเมื่อเชื่อมต่อใช้แฟล็ก -h:

psql -h localhost 

และดูว่าช่วยแก้ไขได้หรือไม่


1

ดูเหมือนว่าจะแก้ไขปัญหาบน Ubuntu:

แก้ไข postgresql.conf:

unix_socket_directories='/var/run/postgresql

ตอนนี้ทำ service postgresql start


1

ฉันใหม่ใน PSQL แต่ฉันแก้ไขปัญหาด้วยการแก้ไข start.conf ฉันได้แสดงความคิดเห็นการตั้งค่า "อัตโนมัติ" เพื่อจัดการเซิร์ฟเวอร์ด้วยตนเอง แต่ต้องการค่า: อัตโนมัติคู่มือหรือปิดการใช้งาน

EGD


1

ในด้านของฉันสคริปต์เริ่มต้นไม่ถูกต้อง ไฟล์คอนฟิกูเรชันถูกติดตั้งใน/etc/postgresql/9.3/mainแต่สคริปต์/usr/share/postgresql-common/init.d-functionsกำลังค้นหาอยู่

for c in /etc/postgresql/"$2"/*; do 

แทนที่บรรทัดนี้ด้วย

for c in /etc/postgresql/"$2"/main; do

-2

ทั้งหมด

หลังจากขุดผมพบวิธีแก้ปัญหา (ก) ที่นี่

http://ubuntuforums.org/showthread.php?t=869080

ซึ่งมีคำแนะนำเหล่านี้:

ทำงานใน terminal:

sudo mkdir -p /usr/local/pgsql/data
sudo chown -R postgres:postgres /usr/local/pgsql/
sudo su - postgres
cd /usr/lib/postgresql/9.3/bin/
./initdb -D /usr/local/pgsql/data
./postgres -D /usr/local/pgsql/data

ตอนนี้เซิร์ฟเวอร์ของฉันเริ่มทำงานแล้ว !!!

แก้ไข : หลังจากรีสตาร์ทเซิร์ฟเวอร์ยังคงไม่ทำงาน ...

ความคิดใด ๆ เกี่ยวกับสาเหตุที่ฉันต้องการเรียกใช้สิ่งนี้ได้รับการชื่นชม!


คุณแน่ใจหรือว่า 9.3 กำลังทำงานอยู่ หมายเลขรุ่นน่าสงสัย ...
Dezso

@dezso ขออภัยลืมเปลี่ยนรุ่น # เมื่อฉันวางในคำสั่งเหล่านี้ ... นี่คือทั้งหมดที่ v9.3 ...
DPSSpatial

คุณอาจต้องระบุพอร์ต มีการใช้พอร์ตเริ่มต้นโดยการติดตั้ง postgres แบบเก่าของคุณ การติดตั้งใหม่ของคุณใช้พอร์ต 5433 เป็นไปได้มากที่สุด แต่นี่เป็นสิ่งที่คุณสามารถตรวจสอบได้อย่างแน่นอนโดยการอ่านไฟล์คอนฟิก postgresql:/etc/postgresql/9.3/main/postgresql.conf
user35581

1
นี่อาจเป็นวิธีแก้ปัญหา แต่ก็ไม่ใช่ทางออกที่ดี สิ่งที่ชอบนี้กำลังแก้ไขปัญหาdba.stackexchange.com/a/91511/8099
โซรินเมื่อ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.