postgresql 安装:initdb 数据目录不为空?

sri*_*har 20 postgresql installation

我正在尝试创建 postgresql 数据库。

当我安装 PostgreSQL 时,我给出了这个命令:

sudo yum install postgresql postgresql-server
Run Code Online (Sandbox Code Playgroud)

后来我修改了配置文件:

sudo vim /var/lib/pgsql/data/pg_hba.conf
Run Code Online (Sandbox Code Playgroud)

并修改为

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
Run Code Online (Sandbox Code Playgroud)

当我尝试启动 postgresql 服务时:

sudo service postgresql initdb

> Data directory is not empty!                               [FAILED]

sudo chkconfig postgresql on

sudo service postgresql start

Starting postgresql service:                               [  OK  ]
Run Code Online (Sandbox Code Playgroud)

是什么导致了这些错误,我该如何修复它们?

Jen*_*y D 19

Initdb 应该只运行一次。它将创建您将保存配置文件和(通常)实际数据库的目录。你显然已经这样做了;否则不会有任何 pg_hba.conf 供您编辑。

因此,postgresql initdb除非您要完全重新安装,否则不要再次运行。


小智 18

这里

如果您完全擦除并重新安装 Postgres 数据库,则在运行时initdb

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

您可能会遇到此服务错误:

数据目录不为空![失败的]

修复它(这是核心选项——所有数据库数据都被擦除!)

在 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


Mic*_*ton 5

在基于 systemd 的系统(例如 RHEL/CentOS 7 和 Fedora)上,运行 initdb 的过程有些不同。这不再由初始化脚本(不再存在)完成,并且新过程更接近上游指令

您必须先到su用户postgres,然后运行initdb​​或pg_ctl initdb。如果您使用 Red Hat 版本,则无需提供数据目录,因为它默认会自动选择默认数据目录/var/lib/pgsql

例如:

# su - postgres
$ pg_ctl initdb
$ exit
#
Run Code Online (Sandbox Code Playgroud)

当然,您只需在首次安装时执行一次此操作即可设置初始数据目录。除非您要创建全新的安装或从灾难中恢复,否则您不会再这样做。