встановлення 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 слід запускати лише один раз. Він створить каталог, де ви будете зберігати конфігураційні файли та (як правило) фактичну базу даних. Ви, очевидно, вже зробили це; інакше не буде жодного pg_hba.conf для редагування.

Тому просто не запускайте postgresql initdbзнову, якщо ви не виконаєте повну перевстановлення.


дякую за відповідь .. Я запускаю його двічі ... ти маєш на увазі його не проблема в установці ..
sridhar

Я маю на увазі, що з вашою установкою немає жодної проблеми, принаймні не тієї, яку ви показали. Єдине, що виходить з ладу - це робити initdb не один раз, і це повинно вийти з ладу - все інше показує як добре. Якщо є якась інша проблема, це допоможе, якщо ви можете її описати.
Дженні Д

Дуже дякую .. тоді це не проблема .. якщо я зіткнувся з проблемою, я дам вам знати ..
sridhar

15

Від сюди :

Якщо ви повністю витираєте та перевстановлюєте DB-файл Postgres, initdbвиконайте такі дії:

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

Ви можете зіткнутися з цією помилкою служби:

Каталог даних не порожній! [ЗНАТИ]

Щоб виправити це (і це ядерний варіант - всі дані 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

У системних системах, таких як RHEL / CentOS 7 та Fedora, процедура запуску initdb дещо відрізняється. Це вже не робиться сценаріями init (яких більше не існує), і нова процедура набагато наближається до інструкцій вище .

Ви повинні спочатку 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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.