Postgres - FATAL: ไฟล์ฐานข้อมูลเข้ากันไม่ได้กับเซิร์ฟเวอร์


185

หลังจากรีสตาร์ท MacBook Pro ฉันไม่สามารถเริ่มเซิร์ฟเวอร์ฐานข้อมูลได้:

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.5432"?

ฉันตรวจสอบบันทึกและบรรทัดต่อไปนี้ปรากฏซ้ำแล้วซ้ำอีก:

FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 9.2, which is not compatible with this version 9.0.4.

9.0.4 เป็นรุ่นที่ติดตั้งไว้ล่วงหน้าบน mac, 9.2 [.4] เป็นรุ่นที่ฉันติดตั้งผ่าน Homebrew ตามที่กล่าวไว้สิ่งนี้เคยทำงานก่อนที่จะรีสตาร์ทจึงไม่สามารถรวบรวมปัญหาได้ ฉันยังวิ่งอีกครั้งinitdb /usr/local/var/postgres -E utf8และไฟล์ยังคงมีอยู่

น่าเสียดายที่ฉันค่อนข้างใหม่สำหรับ Postgres ดังนั้นความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก


1
คุณจะเริ่ม postgres ได้อย่างไร คุณแน่ใจว่าจุดเริ่มต้นของคุณเป็นเวอร์ชั่นใหม่หรือไม่? เพราะตามข้อความแสดงข้อผิดพลาดฉันคิดว่าทั้งสองรุ่นติดตั้งเคียงข้างกันแล้ว
fvu

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start- และคำตอบคือserver starting
klaffenboeck

1
เมื่อคุณค้นหาไฟล์ชื่อpg_ctl ฉันค่อนข้างแน่ใจว่าคุณจะพบ 2 สำเนา และอันที่ตรงกันwhich pg_ctlจะเป็นเวอร์ชั่นเก่าและอีกอันจะเป็นเวอร์ชั่นใหม่
fvu

ทำงานpg_ctl --versionให้pg_ctl (PostgreSQL) 9.2.4
klaffenboeck

2
@EvanCarroll แน่นอนว่าทำแล้ว ฉันคิดว่าตอนนี้พวกเขาได้ย้ายมันเพื่อรวมไว้ภายในServer.appและซ่อนไว้เพื่อใช้พอร์ตที่ไม่ใช่ค่าเริ่มต้นและไดเรกทอรีซ็อกเก็ตยูนิกซ์ ที่สุด!
Craig Ringer

คำตอบ:


364

หากคุณเพิ่งอัพเกรดเป็น 11 หรือ 12 จาก 10.xคุณสามารถเรียกใช้คำสั่งด้านล่างเพื่ออัพเกรดไดเรกทอรีข้อมูล postgres ของคุณเก็บข้อมูลทั้งหมด:

brew postgresql-upgrade-database

คำสั่งดังกล่าวถูกนำมาจากการส่งออกของ brew info postgres


2
สิ่งนี้ใช้งานได้อย่างมีเสน่ห์อย่างไรก็ตามหลังจากทำงานแล้วมันได้แนะนำข้อผิดพลาดครั้งที่สองอย่าลืมอัพเกรดฐานข้อมูลที่สร้างโดย initdb โดยใช้brew postgresql-upgrade-databaseแล้วรีสตาร์ท postgres
Shemogumbe

ทำงานบน 9.5 ถึง 11 เช่นกัน brew infoรุ่งโรจน์สำหรับยังแสดงให้เห็นถึงวิธีการใช้งาน
yacc

2
จาก 10 ถึง 11.5 คุณเป็นผู้ช่วยชีวิต <3
โทมัส

4
ทำงานได้ 11 ถึง 12 เช่นกัน
stevex

1
ทำงานจาก 9.5 เป็น 12 !!
Augusto Samamé Barrientos

169

หากคุณกำลังมองหาตัวเลือกนิวเคลียร์ (ลบข้อมูลทั้งหมดและรับฐานข้อมูลใหม่) คุณสามารถทำได้:

rm -rf /usr/local/var/postgres && initdb /usr/local/var/postgres -E utf8

จากนั้นคุณจะต้องไปrake db:setupและrake db:migrateกลับจากแอพ Rails เพื่อติดตั้งอีกครั้ง


3
หากข้อมูลด้านบนยังคงไม่ทำงาน (ซึ่งเป็นกรณีของฉัน) ให้ลองตั้งชื่อไดเรกทอรีข้อมูลใหม่ให้กับ initdb เช่น / usr / local / var / postgres95
mpelzsherman

btw ทันทีหลังจากนี้คุณอาจต้องเรียกใช้createuser -s your_rails_appเพื่อสร้างผู้ใช้ postgres ของทางรถไฟ ดูstackoverflow.com/questions/11919391/…
Meekohi

38

ลองสิ่งนี้: https://gist.github.com/joho/3735740

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

โปรดดู: http://www.postgresql.org/docs/9.2/static/pgupgrade.htmlเพื่อทำความเข้าใจเพิ่มเติม


2
ทำงานอย่างสมบูรณ์แบบสำหรับฉันด้วยการโยกย้ายจาก 9.4 เป็น 9.5
tftdias

ใช้ได้กับฉันด้วยการโยกย้ายจาก 9.3.4 ถึง 9.5.2
Steve Jorgensen

1
นี่คือขั้นตอนสำหรับการอัปเดต 9.5.5 ถึง 9.6.1 โดยใช้ Homebrew (macOS): gist.github.com/giannisp/b53a76047b07751ed3ade3c1db1d2c51
Giannis

นั่นควรเป็นคำตอบที่ดีที่สุดอย่างแน่นอน !! และไม่มีการสูญหายของข้อมูล
FlorianB

9

พบได้บนอินเทอร์เน็ตวิธีนี้ใช้ได้ดีสำหรับฉัน

เมื่อฉันพยายามเริ่มเซิร์ฟเวอร์ postgresql หลังจากอัปเกรดเป็น OS X 10.10 Yosemite ฉันพบกับปัญหาถัดไป:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

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

เอาล่ะลองมาดูในบันทึกของเซิร์ฟเวอร์:

cat /usr/local/var/postgres/server.log

FATAL: database files are incompatible with server
DETAIL: The data directory was initialized by PostgreSQL version 9.2, which is not compatible with this version 9.3.5.

ดังนั้นเราจำเป็นต้องทำตามขั้นตอนหลังจากอัพเกรด postgresql:

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

mv /usr/local/var/postgres /usr/local/var/postgres92

brew update

brew upgrade postgresql

initdb /usr/local/var/postgres -E utf8

pg_upgrade -b /usr/local/Cellar/postgresql/9.2.3/bin -B /usr/local/Cellar/postgresql/9.3.5_1/bin -d /usr/local/var/postgres92 -D /usr/local/var/postgres

cp /usr/local/Cellar/postgresql/9.3.5_1/homebrew.mxcl.postgresql.plist ~/Library/LaunchAgents/

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

rm -rf /usr/local/var/postgres92

แค่นั้นแหละ.


1
ฉันใช้ขั้นตอนข้างต้นเพื่ออัปเกรดจาก 9.53 เป็น 10.0 คำสั่ง pg_upgrade ได้อัพเกรดเล็กน้อย คำสั่งใหม่คือ pg_upgrade -b /usr/local/Cellar/postgresql/9.5.3/bin/ -B /usr/local/Cellar/postgresql/10.0/bin -d / usr / local / var / postgres95 / local / var / postgres
techvineet

ทางออกที่ดีกว่าด้านล่าง
Gady

8

หากคุณต้องการเก็บ postgres รุ่นก่อนหน้าให้ใช้brew switch:

$ brew info postgresql

postgresql: stable 10.5 (bottled), HEAD
Object-relational database system
https://www.postgresql.org/
Conflicts with:
  postgres-xc (because postgresql and postgres-xc install the same binaries.)
/usr/local/Cellar/postgresql/9.6.3 (3,259 files, 36.6MB)
  Poured from bottle on 2017-07-09 at 22:15:41
/usr/local/Cellar/postgresql/10.5 (1,705 files, 20.8MB) *
  Poured from bottle on 2018-11-04 at 15:13:13

$ brew switch postgresql 9.6.3
$ brew services stop postgresql
$ brew services start postgresql

brew postgresql-upgrade-databaseมิฉะนั้นพิจารณาคำสั่งเบียร์นี้ในการโยกย้ายข้อมูลที่มีอยู่: ตรวจสอบรหัสที่มา


1

มันเกิดขึ้นกับฉันเมื่อฉันพยายามเริ่ม Postgres12 ด้วยไดรฟ์ข้อมูลที่ติดตั้ง postgres11 เพียงแค่ลบโวลุ่มที่เมานต์สำหรับ postgres11 และเริ่มการทำงานให้ฉันใหม่

ก่อนหน้านี้ฉันใช้:

docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:11

ฉันลบ / Users / champ / postgres และเริ่ม postgres 12 อีกครั้งโดยใช้

docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:12
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.