ไม่สามารถเชื่อมต่อกับ postgresql บนพอร์ต 5432


82

ฉันติดตั้งBitnami Django stackซึ่งรวมถึง PostgreSQL 8.4

เมื่อฉันเรียกใช้psql -U postgresฉันพบข้อผิดพลาดต่อไปนี้

psql: 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"?

PG กำลังทำงานอย่างแน่นอนและpg_hba.confไฟล์มีลักษณะดังนี้:

# TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

สิ่งที่ช่วยให้?

"พิสูจน์" ว่า pg กำลังทำงาน:

root@assaf-desktop:/home/assaf# ps axf | grep postgres
14338 ?        S      0:00 /opt/djangostack-1.3-0/postgresql/bin/postgres -D /opt/djangostack-1.3-0/postgresql/data -p 5432
14347 ?        Ss     0:00  \_ postgres: writer process                                                                        
14348 ?        Ss     0:00  \_ postgres: wal writer process                                                                    
14349 ?        Ss     0:00  \_ postgres: autovacuum launcher process                                                           
14350 ?        Ss     0:00  \_ postgres: stats collector process                                                               
15139 pts/1    S+     0:00              \_ grep --color=auto postgres
root@assaf-desktop:/home/assaf# netstat -nltp | grep 5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      14338/postgres  
tcp6       0      0 ::1:5432                :::*                    LISTEN      14338/postgres  
root@assaf-desktop:/home/assaf# 

ฉันไม่รู้ว่าคุณกำลังถามอะไรและคุณไม่เคยให้ข้อมูลอะไรเลย นี่คือ 100 คนที่ได้รับข้อผิดพลาดทั่วไปและรายงานสิ่งต่าง ๆ เป็นรูปแบบทั้งหมดสำหรับเว็บไซต์
Evan Carroll

คำตอบ:


87

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

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

ก่อนอื่นให้ล้างการติดตั้ง postgres เก่า ปัญหานี้อยู่ที่ 9.1 ดังนั้นฉันจะถือว่านั่นคือสิ่งที่คุณติดตั้ง

sudo apt-get remove --purge postgresql-9.1

ตอนนี้ติดตั้งใหม่

sudo apt-get install postgresql-9.1

จดชื่อแพ็คเกจด้วยหมายเลขรุ่น HTH


3
สิ่งนี้ช่วยให้ฉันมี postgres 9.3
sevenseacat

1
นี่ควรเป็นคำตอบที่ได้รับการยอมรับทำงานร่วมกับ postgres 9.4 / ubuntu 14.10 ด้วย
Malte

1
คำตอบนี้ช่วยฉันด้วย postgres 9.4 และ 9.3 mixup เย็น.
Ingo

2
ใช้งานได้กับ Ubuntu 16.04 และ postgres 9.5 แต่ต้องกำจัดทุกแพ็คเกจที่เกี่ยวข้องก่อน
ปลิ้น

2
นี่เป็นคำตอบที่ยอดเยี่ยมจริงๆ! และยังเป็นประสบการณ์การใช้งานที่ยอดเยี่ยมในด้านหลังของผู้ใช้
user1952500

23

ข้อความแสดงข้อผิดพลาดอ้างถึงซ็อกเก็ต Unix-domain ดังนั้นคุณต้องปรับแต่งnetstatการร้องขอของคุณเพื่อไม่ให้แยกออก ดังนั้นลองโดยไม่มีตัวเลือก-t:

netstat -nlp | grep 5432

ฉันเดาว่าเซิร์ฟเวอร์กำลังฟังซ็อกเก็ต/tmp/.s.PGSQL.5432มากกว่า/var/run/postgresql/.s.PGSQL.5432ที่ไคลเอ็นต์ของคุณกำลังพยายามเชื่อมต่อ ปัญหานี้เป็นปัญหาทั่วไปเมื่อใช้แพคเกจ PostgreSQL มือรวบรวมหรือบุคคลที่สามใน Debian หรืออูบุนตูเพราะเริ่มต้นแหล่งที่มาสำหรับไดเรกทอรีซ็อกเก็ตยูนิกซ์โดเมน/tmpแต่บรรจุภัณฑ์ Debian /var/run/postgresqlเปลี่ยนแปลงไป

วิธีแก้ไขที่เป็นไปได้:

  • ใช้ลูกค้าที่จัดทำโดยแพ็คเกจบุคคลที่สามของคุณ (โทร/opt/djangostack-1.3-0/postgresql/bin/psql) อาจถอนการติดตั้งแพ็คเกจที่ให้มากับ Ubuntu โดยสิ้นเชิง (อาจเป็นเรื่องยากเนื่องจากการพึ่งพาย้อนกลับอื่น ๆ )
  • แก้ไขไดเรกทอรีซ็อกเก็ตของแพ็คเกจบุคคลที่สามเพื่อให้สามารถทำงานร่วมกับ Debian / Ubuntu
  • ใช้-H localhostเพื่อเชื่อมต่อผ่าน TCP / IP แทน
  • ใช้-h /tmpหรือเทียบเท่าPGHOSTการตั้งค่าเพื่อชี้ไปที่ไดเรกทอรีที่ถูกต้อง
  • อย่าใช้แพ็คเกจของบุคคลที่สาม

19

สิ่งนี้ใช้ได้กับฉัน:

แก้ไข: postgresql.conf

sudo nano /etc/postgresql/9.3/main/postgresql.conf

เปิดใช้งานหรือเพิ่ม:

listen_addresses = '*'

รีสตาร์ทเอ็นจินฐานข้อมูล:

sudo service postgresql restart

นอกจากนี้คุณสามารถตรวจสอบไฟล์ pg_hba.conf

sudo nano /etc/postgresql/9.3/main/pg_hba.conf

และเพิ่มเครือข่ายหรือที่อยู่โฮสต์ของคุณ:

host    all             all             192.168.1.0/24          md5

the Listen_address = '*' สร้างกลอุบาย มันเป็นเพียงฟังใน "localhost" และไม่ได้อยู่ใน 127.0.0.1 ขอขอบคุณ!
mwm

พระเจ้าของฉัน ... ในที่สุดบางสิ่งบางอย่างที่ทำงานได้ - ไม่มีอะไรทำงานจนกว่าฉันจะเพิ่มที่อยู่และ Listen_address
AntonB

บวกหนึ่ง! มันใช้งานได้สำหรับฉัน
Atul Makwana

1
สิ่งนี้ทำงานบน ubuntu windows bash
ahmadalibaloch

ฉันสามารถยืนยันได้ว่าสามารถใช้งานได้บนเซิร์ฟเวอร์ Ubuntu ของคำสั่งทุบตีใน Windows 10
Ronald

18

คุณสามารถใช้psql -U postgres -h localhostเพื่อบังคับให้การเชื่อมต่อเกิดขึ้นผ่าน TCP แทนซ็อกเก็ตโดเมน UNIX netstatผลลัพธ์ของคุณแสดงว่าเซิร์ฟเวอร์ PostgreSQL กำลังรับฟังพอร์ตของ localhost 5432

คุณสามารถค้นหาว่าซ็อกเก็ต UNIX แบบโลคัลนั้นถูกใช้โดยเซิร์ฟเวอร์ PostgrSQL โดยใช้การเรียกใช้netstat อื่น :

netstat -lp --protocol=unix | grep postgres

ในอัตราใด ๆ อินเตอร์เฟซที่เซิร์ฟเวอร์ PostgreSQL postgresql.confฟังจะมีการกำหนดค่าใน


17

เพียงสร้าง softlink แบบนี้:

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

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

2
ln: ล้มเหลวในการสร้างลิงก์สัญลักษณ์ '/var/run/postgresql/.s.PGSQL.5432': ไฟล์มีอยู่
P_M

ฉันได้สร้างโฟลเดอร์ "postgresql" ในไดเรกทอรี / var / run / มันไม่มีอยู่จริง
Ikrom

ทำงานได้อย่างน่าอัศจรรย์อะไรคือเหตุผลเบื้องหลังสิ่งนี้
Teoman shipahi

7

ฉันทำให้มันทำงานได้โดยทำสิ่งนี้:

dpkg-reconfigure locales

เลือกสถานที่ที่คุณต้องการแล้วเรียกใช้

pg_createcluster 9.5 main --start

(9.5 เป็นรุ่น postgresql ของฉัน)

/etc/init.d/postgresql start

แล้วมันก็ใช้งานได้!

sudo su - postgres
psql

ขอโทษฉันคิดว่าคำสั่งทำให้มันชัดเจน สำหรับฉันฉันพบปัญหานี้เมื่อฉันติดตั้ง postgresql ฉันพยายามเริ่มต้นใหม่ตามประเภทservice postgresql restart แต่บอกว่าฉันไม่มีคลัสเตอร์ postgresql จากนั้นฉันก็พบว่าวิธีนี้จะช่วยให้ฉันออก :)
mymusise

หลังจาก Googling สามชั่วโมงในที่สุดคุณก็สามารถแก้ไขปัญหาของฉันได้ dpkg-reconfigure localesเป็นเรื่องที่ค่อนข้างสำคัญ
ดอนคุณแม่

5

ฉันต้องรวบรวม PostgreSQL 8.1 บน Debian Squeeze เพราะฉันใช้ Project Open ซึ่งใช้ OpenACS และจะไม่ทำงานใน PostgreSQL รุ่นที่ใหม่กว่า

การกำหนดค่าเริ่มต้นรวบรวมทำให้unix_socketใน/tmpแต่เปิดโครงการซึ่งอาศัย PostgreSQL, จะไม่ทำงานเพราะมันจะมองหาที่unix_socket/var/run/postgresql

มีการตั้งค่าpostgresql.confเพื่อกำหนดตำแหน่งของซ็อกเก็ต ปัญหาของฉันคือว่าฉันสามารถตั้งค่า/tmpและpsqlทำงาน แต่ไม่เปิดโครงการหรือฉันสามารถตั้งค่า/var/run/postgresqlและpsqlจะไม่ทำงาน แต่โครงการเปิดได้

วิธีแก้ไขปัญหาหนึ่งคือการตั้งค่าซ็อกเก็ต/var/run/postgresqlแล้วเรียกใช้psqlตามคำแนะนำของปีเตอร์ดังนี้:

psql -h /var/run/postgresql

สิ่งนี้ทำงานภายในเครื่องโดยใช้การอนุญาตในพื้นที่ ข้อเสียเปรียบเพียงอย่างเดียวคือมันพิมพ์ได้มากกว่าเพียงแค่ "psql"

ข้อเสนอแนะอื่น ๆ ที่มีคนทำคือการสร้างลิงค์สัญลักษณ์ระหว่างสองสถานที่ วิธีนี้ใช้งานได้ แต่ลิงก์จะหายไปเมื่อรีบูต มันอาจจะง่ายเพียงแค่ใช้อาร์กิวเมนต์ -h แต่ฉันสร้างการเชื่อมโยงสัญลักษณ์จากภายในสคริปต์ PostgreSQL /etc/init.dใน ฉันวางคำสั่งสร้างสัญลักษณ์ลิงก์ไว้ในส่วน "เริ่มต้น" แน่นอนเมื่อฉันออกคำสั่งหยุดและเริ่มต้นหรือเริ่มต้นใหม่ก็จะพยายามสร้างการเชื่อมโยงสัญลักษณ์ที่มีอยู่ แต่นอกเหนือจากข้อความเตือนอาจมีอันตรายในนั้น

ในกรณีของฉันแทน:

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

ฉันมี

ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432

และมีการกำหนดอย่างชัดเจน unix_socket ไปใน/var/run/postgresql/.s.PGSQL.5432postgresql.conf


3

วิธีการแก้:

ทำเช่นนี้

export LC_ALL="en_US.UTF-8"

และนี่. ( 9.3เป็นรุ่น PostgreSQL ปัจจุบันของฉันเขียนรุ่นของคุณ!)

sudo pg_createcluster 9.3 main --start

woooow มันเป็นเพียงการแก้ปัญหาของฉันขอบคุณ
user3687723

3

หากบริการ Postgres ของคุณเปิดใช้งานโดยไม่มีข้อผิดพลาดหรือไม่มีข้อผิดพลาดในการเริ่มบริการ Postgres และคุณยังคงได้รับข้อผิดพลาดดังกล่าวให้ทำตามขั้นตอนเหล่านี้

ขั้นที่ 1: การรันpg_lsclustersจะแสดงรายการกลุ่ม postgres ทั้งหมดที่ทำงานบนอุปกรณ์ของคุณ

เช่น:

Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

ส่วนใหญ่อาจเป็นสถานะจะลงในกรณีของคุณและบริการ postgres

ขั้นตอนที่ 2: รีสตาร์ท pg_ctlcluster

#format is pg_ctlcluster <version> <cluster> <action>
sudo pg_ctlcluster 9.6 main start

#restart postgres
sudo service postgres restart

ขั้นตอนที่ 3: ขั้นตอนที่ 2 ล้มเหลวและเกิดข้อผิดพลาด

หากกระบวนการนี้ไม่สำเร็จจะเกิดข้อผิดพลาด คุณสามารถดูบันทึกข้อผิดพลาด/var/log/postgresql/postgresql-9.6-main.log

ข้อผิดพลาดของฉันคือ:

FATAL: could not access private key file "/etc/ssl/private/ssl-cert-snakeoil.key": Permission denied
Try adding `postgres` user to the group `ssl-cert`

ขั้นตอนที่ 4: ตรวจสอบความเป็นเจ้าของ postgres

ตรวจสอบให้แน่ใจว่าpostgresเป็นเจ้าของ/var/lib/postgresql/version_no/main

ถ้าไม่ทำงาน

sudo chown postgres -R /var/lib/postgresql/9.6/main/

ขั้นตอนที่ 5: ตรวจสอบผู้ใช้ postgres เป็นของกลุ่มผู้ใช้ ssl-cert

ปรากฎว่าฉันลบผู้ใช้ Postgres ออกจากssl-certกลุ่มอย่างไม่ถูกต้อง เรียกใช้รหัสด้านล่างเพื่อแก้ไขปัญหากลุ่มผู้ใช้และแก้ไขสิทธิ์

#set user to group back with
sudo gpasswd -a postgres ssl-cert

# Fix ownership and mode
sudo chown root:ssl-cert  /etc/ssl/private/ssl-cert-snakeoil.key
sudo chmod 740 /etc/ssl/private/ssl-cert-snakeoil.key

# now postgresql starts! (and install command doesn't fail anymore)
sudo service postgres restart

2

ในกรณีของฉันมันเกิดจากการพิมพ์ผิดที่ฉันทำในขณะที่แก้ไข /etc/postgresql/9.5/main/pg_hba.conf

ฉันเปลี่ยน:

# Database administrative login by Unix domain socket
local   all             postgres                                peer

ไปที่:

# Database administrative login by Unix domain socket
local   all             postgres                                MD5

แต่MD5จะต้องเป็นตัวพิมพ์เล็กmd5:

# Database administrative login by Unix domain socket
local   all             postgres                                md5

1
นี่คือคำตอบที่คงไว้สำหรับฉัน :) ฉันเคยเปลี่ยนของฉันเป็นtrustedแทนที่จะเป็นtrustและไม่ได้เริ่มบริการใหม่และมันก็ยากจนในวันถัดไปเมื่อฉันลืมสิ่งที่ฉันเปลี่ยนไปแล้ว
Phlippie Bosman

2

ฉันพบว่าการถอนการติดตั้ง Postgres นั้นไม่น่าเชื่อถือ สิ่งนี้ช่วยในการแก้ปัญหาของฉัน:

  1. เริ่มเซิร์ฟเวอร์ postgres:

    sudo systemctl start postgresql
    
  2. ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์เริ่มบู๊ตแล้ว:

    sudo systemctl enable postgresql
    

ข้อมูลรายละเอียดสามารถพบได้บนเว็บไซต์ DigitalOcean ที่นี่


2

ฉันไม่สามารถแก้ปัญหานี้กับเซิร์ฟเวอร์ postgres-9.5 ของฉัน หลังจากความคืบหน้าเป็นศูนย์ 3 วันพยายามเปลี่ยนวิธีแก้ไขทุกครั้งในไซต์นี้และเว็บไซต์อื่น ๆ ฉันตัดสินใจติดตั้งเซิร์ฟเวอร์อีกครั้งและเสียค่าใช้จ่ายในการทำงาน 5 วัน แต่ฉันทำซ้ำปัญหาในอินสแตนซ์ใหม่ นี่อาจให้มุมมองบางอย่างเกี่ยวกับวิธีการแก้ไขก่อนที่คุณจะเข้าใกล้ความหายนะที่ฉันทำ

ก่อนอื่นให้ปิดการใช้งานการตั้งค่าการบันทึกทั้งหมดใน postgresql.conf นี่คือส่วน:

# ERROR REPORTING AND LOGGING

แสดงความคิดเห็นทุกอย่างในส่วนนั้น จากนั้นเริ่มบริการใหม่

เมื่อรีสตาร์ทใช้ /etc/init.d/postgresql start หรือrestart ฉันพบว่ามีประโยชน์ที่จะอยู่ในโหมด superuser ขณะรีสตาร์ท ฉันเปิดหน้าต่าง x เพื่อใช้งานเท่านั้น คุณสามารถสร้างโหมด superuser sudo -iว่า

ตรวจสอบว่าเซิร์ฟเวอร์สามารถเข้าถึงได้ด้วยคำสั่งง่ายๆนี้: psql -l -U postgres

หากยังไม่สามารถแก้ไขได้ให้พิจารณาสิ่งนี้:

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

เมื่อคุณเข้าถึงได้แล้วให้เปลี่ยนแต่ละบรรทัดที่เกี่ยวข้องใน# ERROR REPORTING AND LOGGINGส่วนของpostgresql.confไฟล์อย่างเป็นระบบ รีสตาร์ทและทดสอบ ฉันพบว่าโฟลเดอร์เริ่มต้นสำหรับบันทึกนั้นเป็นสาเหตุของความล้มเหลว log_directoryผมแสดงความคิดเห็นโดยเฉพาะออก /var/log/postgresqlโฟลเดอร์เริ่มต้นของระบบลดลงบันทึกลงแล้ว


1

อาจเป็นไปได้ว่าเกิดขึ้นเพราะคุณเปลี่ยนการอนุญาตของ/var/lib/postgresql/9.3/mainโฟลเดอร์

ลองเปลี่ยนเป็น 700 โดยใช้คำสั่งด้านล่าง:

sudo chmod 700 main

1

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

การตั้งค่าของฉัน: Windows Subsystem สำหรับ Linux, Docker-compose w / makefile w / dockerfile, Flask, Postgresql (โดยใช้ schema ที่ประกอบด้วยตาราง)

หากต้องการเชื่อมต่อกับ postgres ให้ตั้งค่าสตริงการเชื่อมต่อของคุณดังนี้:

from flask import Flask
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql+psycopg2://<user>:<password>@<container_name_in_docker-compose.yml>/<database_name>"

หมายเหตุ: ฉันไม่เคยได้รับ IP ใด ๆ (เช่น localhost, 127.0.0.1) ในการทำงานโดยใช้วิธีการใด ๆ ในหัวข้อนี้ แนวคิดสำหรับการใช้ชื่อคอนเทนเนอร์แทน localhost มาจากที่นี่: https://github.com/docker-library/postgres/issues/297

ตั้งค่าสคีมาของคุณ:

from sqlalchemy import MetaData
db = SQLAlchemy(app, metadata=MetaData(schema="<schema_name>"))

กำหนดเส้นทางการค้นหาสำหรับฟังก์ชั่นของคุณเมื่อคุณตั้งค่าเซสชั่น:

db.session.execute("SET search_path TO <schema_name>")

0

ฉันมีปัญหาแบบเดียวกันกับที่ Peter Eisentraut อธิบายไว้ การใช้คำสั่งฉันจะได้เห็นเซิร์ฟเวอร์ถูกฟังบนซ็อกเก็ตnetstat -nlp | grep 5432/tmp/.s.PGSQL.5432

ในการแก้ไขปัญหานี้เพียงแก้ไขpostgresql.confไฟล์ของคุณและเปลี่ยนบรรทัดต่อไปนี้:

listen_addresses = '*'
unix_socket_directories = '/var/run/postgresql'

ตอนนี้รันservice postgresql-9.4 restart(แทนที่ 9-4 ด้วยเวอร์ชันของคุณ) และการเชื่อมต่อระยะไกลควรจะใช้งานได้แล้ว

ตอนนี้เพื่ออนุญาตการเชื่อมต่อท้องถิ่นเพียงแค่สร้างลิงก์สัญลักษณ์ไปยัง/var/run/postgresqlไดเรกทอรี

ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432

อย่าลืมตรวจสอบให้แน่ใจว่าคุณpg_hba.confได้กำหนดค่าอย่างถูกต้องด้วย



0

ค้นหาไฟล์ของคุณ:

sudo find /tmp/ -name .s.PGSQL.5432

ผลลัพธ์:

/tmp/.s.PGSQL.5432

เข้าสู่ระบบในฐานะผู้ใช้ postgres:

su postgres
psql -h /tmp/ yourdatabase

0

ฉันมีปัญหาเดียวกัน (บน Ubuntu 15.10 (เขี้ยวลากดิน)) sudo find / -name 'pg_hba.conf' -printหรือsudo find / -name 'postgresql.conf' -printว่างเปล่า ก่อนหน้านี้ดูเหมือนว่ามีการติดตั้ง postgresql หลายอินสแตนซ์

คุณอาจมีลักษณะคล้ายกันเมื่อคุณเห็นว่าติดตั้งหรือแสดงปัญหาการอ้างอิง

.../postgresql
.../postgresql-9.x 

และอื่น ๆ

ในกรณีนั้นคุณจะต้องทำsudo apt-get autoremoveแพ็คเกจ 1 ต่อ 1

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

sudo apt-get update && sudo apt-get -y install python-software-properties && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

หากไม่ได้ใช้เขี้ยวลากดินให้เปลี่ยน wilyด้วยการเปิดตัวของคุณเช่นกับการส่งออกของlsb_release -cs

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ wily-pgdg main" >> /etc/apt/sources.list.d/postgresql.list'
sudo apt-get update && sudo apt-get install postgresql-9.3 pgadmin3

จากนั้นคุณก็ควรจะสามารถเชื่อมต่อและสร้างผู้ใช้ได้

ผลลัพธ์ที่คาดหวัง:

Creating new cluster 9.3/main ...
config /etc/postgresql/9.3/main
data   /var/lib/postgresql/9.3/main
locale en_US.UTF-8
socket /var/run/postgresql
port   5432

ที่มาของโซลูชันของฉัน (เครดิต)


0

ในขณะที่มีปัญหาเดียวกันฉันลองทำสิ่งที่แตกต่าง:

การเริ่มต้น postgresql daemon ด้วยตนเองฉันได้รับ:

FATAL:  could not create shared memory segment ...
   To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's
   shared memory usage, perhaps by reducing shared_buffers or max_connections.

ดังนั้นสิ่งที่ฉันทำคือการกำหนดวงเงินที่ต่ำกว่าสำหรับshared_buffersและmax_connectionsเข้าpostgresql.confและออกrestartบริการ

นี่เป็นการแก้ไขปัญหา!

นี่คือบันทึกข้อผิดพลาดแบบเต็ม:

$ sudo service postgresql start
 * Starting PostgreSQL 9.1 database server                                                                                                                                                               * The PostgreSQL server failed to start. Please check the log output:
2013-06-26 15:05:11 CEST FATAL:  could not create shared memory segment: Invalid argument
2013-06-26 15:05:11 CEST DETAIL:  Failed system call was shmget(key=5432001, size=57237504, 03600).
2013-06-26 15:05:11 CEST HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
    If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
    The PostgreSQL documentation contains more information about shared memory configuration.

0

หลังจากพยายามมาหลายครั้งฉันพบวิธีแก้ปัญหาโดยอ้างอิงจากโพสต์อื่น!

dpkg -l | grep postgres
apt-get --purge remove <package-founded-1> <package-founded-2>
whereis postgres
whereis postgresql
sudo rm -rf <paths-founded>
sudo userdel -f postgres

0

สร้างไดเร็กทอรีpostgresqlภายใน run แล้วรันคำสั่งต่อไปนี้

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

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