การติดตั้ง postgresql: ไดเรกทอรีข้อมูล initdb ไม่ว่างเปล่า?


17

ฉันพยายามสร้างฐานข้อมูล postgresql

เมื่อฉันติดตั้ง PostgreSQL ฉันได้รับคำสั่งนี้:

sudo yum install postgresql postgresql-server

และต่อมาฉันแก้ไขไฟล์ปรับแต่ง:

sudo vim /var/lib/pgsql/data/pg_hba.conf

และแก้ไขเป็น

local   all         all                               trust
host    all         all         127.0.0.1/32          trust
host    all         all         ::1/128               trust
host    all         all         0.0.0.0/0             md5

ขณะที่ฉันพยายามเริ่มบริการ postgresql:

sudo service postgresql initdb

> Data directory is not empty!                               [FAILED]

sudo chkconfig postgresql on

sudo service postgresql start

Starting postgresql service:                               [  OK  ]

เกิดจากข้อผิดพลาดเหล่านี้อย่างไรและฉันจะแก้ไขได้อย่างไร

คำตอบ:


18

Initdb ควรจะรันเพียงครั้งเดียว มันจะสร้างไดเรกทอรีที่คุณจะเก็บไฟล์ปรับแต่งและ (โดยปกติ) ฐานข้อมูลจริง เห็นได้ชัดว่าคุณได้ทำไปแล้ว otherwrise จะไม่มี pg_hba.conf ใด ๆ ให้คุณแก้ไข

ดังนั้นอย่าเพิ่งทำงานpostgresql initdbอีกเว้นแต่ว่าคุณกำลังติดตั้งใหม่ทั้งหมด


ขอบคุณสำหรับการตอบ .. ฉันใช้มันสองครั้ง ... คุณหมายถึงไม่ได้เป็นปัญหาของตนในการติดตั้ง ..
Sridhar

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

ขอบคุณมาก .. แล้วมันก็ไม่เป็นปัญหา .. ถ้าฉันประสบปัญหาฉันจะแจ้งให้คุณทราบ ..
sridhar

15

จากที่นี่ :

หากคุณกำลังเช็ด & ติดตั้ง Postgres DB ใหม่ทั้งหมดเมื่อทำงานinitdbเช่น:

service postgresql-9.2 initdb -E 'UTF8' --pgdata="/foo/bar/"

คุณสามารถพบข้อผิดพลาดของบริการนี้:

ไดเรกทอรีข้อมูลไม่ว่างเปล่า! [FAILED]

เพื่อแก้ไข (และนี่คือตัวเลือกนิวเคลียร์ - ข้อมูล db ทั้งหมดถูกลบ!)

บน Amazon Linux (2014-x):

rm -rf /var/lib/pgsql9/data

บน CentOS (6.x)

rm -rf /var/lib/pgsql/9.2/data

ตอนนี้ให้ลองinitdbคำสั่งอีกครั้งและมันควรจะได้ผลในครั้งนี้:

service postgresql-9.2 initdb


4

สำหรับระบบที่ใช้ systemd เช่น RHEL / CentOS 7 และ Fedora โพรซีเดอร์สำหรับการเรียกใช้ initdb นั้นแตกต่างกันบ้าง สิ่งนี้ไม่ได้กระทำโดยสคริปต์เริ่มต้น (ซึ่งไม่มีอยู่อีกต่อไป) และกระบวนการใหม่นั้นใกล้กับคำแนะนำอัปสตรีมมาก

คุณต้องแรกsuกับpostgresการใช้งานและเรียกใช้แล้วหรือinitdb pg_ctl initdbก็ไม่จำเป็นที่จะให้ไดเรกทอรีข้อมูลถ้าคุณกำลังใช้สร้าง Red Hat /var/lib/pgsqlเป็นค่าเริ่มต้นโดยอัตโนมัติเลือกไดเรกทอรีข้อมูลเริ่มต้น

ตัวอย่างเช่น:

# su - postgres
$ pg_ctl initdb
$ exit
#

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


3

ฉันมีปัญหาเดียวกันโดยใช้ PostgreSQL 9.3 บน CentOS 6

ฉันลบโฟลเดอร์ /var/lib/pgsql/9.3/data จากนั้นรันคำสั่งอีกครั้ง

sudo service postgresql-9.3 initdb

... ซึ่งเริ่มต้นบริการ db สำเร็จอีกครั้ง

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