Назад | Перейти на главную страницу

Установка postgresql: каталог данных initdb не пуст?

Я пытаюсь создать базу данных 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  ]

Что вызвало эти ошибки и как их исправить?

Initdb следует запускать только один раз. Он создаст каталог, в котором вы будете хранить файлы конфигурации и (обычно) саму базу данных. Очевидно, вы уже это сделали; otherwrise не будет никакого pg_hba.conf для редактирования.

Так что просто не беги postgresql initdb снова, если вы не выполняете полную переустановку.

Из Вот:

Если вы полностью стираете и переустанавливаете базу данных Postgres, при запуске initdb лайк:

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

вы можете столкнуться с этой служебной ошибкой:

Каталог данных не пуст! [НЕ СМОГЛИ]

Чтобы исправить это (и это ядерный вариант - все данные db стираются!)

В Amazon Linux (2014-х):

rm -rf /var/lib/pgsql9/data

В CentOS (6.x)

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

Теперь попробуйте initdb команду снова, и на этот раз она должна работать:

service postgresql-9.2 initdb

В системах на основе systemd, таких как RHEL / CentOS 7 и Fedora, процедура запуска initdb несколько отличается. Это больше не выполняется сценариями инициализации (которые больше не существуют), и новая процедура намного ближе к инструкции восходящего потока.

Вы должны сначала su к postgres пользователь, а затем запустите initdb или pg_ctl initdb. Нет необходимости предоставлять каталог данных, если вы используете сборку Red Hat, так как по умолчанию автоматически выбирается каталог данных по умолчанию. /var/lib/pgsql.

Например:

# su - postgres
$ pg_ctl initdb
$ exit
#

Конечно, вы делаете это только один раз при первой установке, чтобы настроить каталог исходных данных. Вы бы не сделали этого снова, если бы не создавали полностью новую установку или не выполняли восстановление после аварии.

У меня была такая же проблема при использовании PostgreSQL 9.3 на CentOS 6.

Я удалил папку /var/lib/pgsql/9.3/data, а затем повторно выполнил команду

sudo service postgresql-9.3 initdb

... который снова успешно инициализировал службу db.