Linux 上的 PostgreSQL "initdb"(数据库初始化)
PostgreSQL "initdb" (Database Initialization) on Linux
我正致力于在 PostgreSQL 9.x 中创建数据库集群(单个数据库),在 Linux 系统(CentOS - RedHat - Fedora)上工作。我已经安装了正确的 PostgreSQL 包(服务器和客户端)但是,我无法创建数据库并得到某种类型的 初始化依赖项错误:总线错误/退出代码 135。我已将我的用户更改为 "postgres" "su postgres",然后尝试使用 "initdb" 初始化数据库(这可能是问题所在)
Installed: postgresql-libs-9.2.13-1.el7_1.x86_64
Installed: postgresql-9.2.13-1.el7_1.x86_64
Installed: postgresql-server-9.2.13-1.el7_1.x86_64
$ initdb -D /usr/local/pgsql/data
http://www.postgresql.org/docs/9.2/interactive/creating-cluster.html
错误:
$ initdb -D /usr/local/pgsql/data
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
creating directory /usr/local/pgsql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 32MB
creating configuration files ... ok
creating template1 database in /usr/local/pgsql/data/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... sh: line 1: 12616 Bus error (core dumped) "/usr/bin/postgres" --single -F -O -c search_path=pg_catalog -c exit_on_error=true template1 > /dev/null
child process exited with exit code 135
有什么想法吗?
如果您是从包中安装的,则应使用包提供的方法来创建数据库。对于 README.rpm-dist
:
中记录的 PDGD RPM(来自 http://yum.postgresql.org/)
/usr/pgsql-9.4/bin/postgresql94-setup initdb
但是,您遇到的错误确实不应该发生。它表明硬件不兼容或低级别问题,如不兼容的 C 库。也许您从其他 OS 或版本强制安装了 RPM?
更新:
很可能是 C 库不兼容。也许是 RHEL 和 CentOS 之间的问题?还是版本相关?这是动态链接器的错误。 dl-lookup.c
将是 glibc/elf/dl-lookup.c
并且它似乎在符号查找期间崩溃。所以这里有些东西真的很奇怪,比如二进制文件中损坏的符号散列 table 或者二进制文件和使用的动态链接器之间的不兼容。或内存故障、磁盘故障、CPU 缓存问题或其他硬件错误。
如果重启让它消失,我会非常怀疑硬件。如果没有,你可能在系统上遇到了一些非常奇怪的东西,比如一些第 3 方未打包的安装程序覆盖了原始的 C 库/动态链接器,那种奇怪。
安装 PostgreSQL(服务器和客户端工具)后,需要 运行 以下命令作为 ROOT ("su")。关键步骤是启动 "service postgresql initdb" 并让它初始化您的 PostgreSQL 数据库。
如果您有任何错误,您需要删除空安装 "data" 目录并仔细阅读所有日志文件。
# service postgresql initdb
# systemctl enable postgresql
# systemctl start postgresql
完成上述操作后,验证 postgres 是否在 /var/lib/pgsql 和 运行ning 进程 "ps -ef | grep postgres"(它在端口 5432 上)
如果您 运行 遇到任何其他问题,您可能需要创建或修改 postgres user/password 或清理 postgres 数据目录。
我正致力于在 PostgreSQL 9.x 中创建数据库集群(单个数据库),在 Linux 系统(CentOS - RedHat - Fedora)上工作。我已经安装了正确的 PostgreSQL 包(服务器和客户端)但是,我无法创建数据库并得到某种类型的 初始化依赖项错误:总线错误/退出代码 135。我已将我的用户更改为 "postgres" "su postgres",然后尝试使用 "initdb" 初始化数据库(这可能是问题所在)
Installed: postgresql-libs-9.2.13-1.el7_1.x86_64
Installed: postgresql-9.2.13-1.el7_1.x86_64
Installed: postgresql-server-9.2.13-1.el7_1.x86_64
$ initdb -D /usr/local/pgsql/data
http://www.postgresql.org/docs/9.2/interactive/creating-cluster.html
错误:
$ initdb -D /usr/local/pgsql/data
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
creating directory /usr/local/pgsql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 32MB
creating configuration files ... ok
creating template1 database in /usr/local/pgsql/data/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... sh: line 1: 12616 Bus error (core dumped) "/usr/bin/postgres" --single -F -O -c search_path=pg_catalog -c exit_on_error=true template1 > /dev/null
child process exited with exit code 135
有什么想法吗?
如果您是从包中安装的,则应使用包提供的方法来创建数据库。对于 README.rpm-dist
:
/usr/pgsql-9.4/bin/postgresql94-setup initdb
但是,您遇到的错误确实不应该发生。它表明硬件不兼容或低级别问题,如不兼容的 C 库。也许您从其他 OS 或版本强制安装了 RPM?
更新:
很可能是 C 库不兼容。也许是 RHEL 和 CentOS 之间的问题?还是版本相关?这是动态链接器的错误。 dl-lookup.c
将是 glibc/elf/dl-lookup.c
并且它似乎在符号查找期间崩溃。所以这里有些东西真的很奇怪,比如二进制文件中损坏的符号散列 table 或者二进制文件和使用的动态链接器之间的不兼容。或内存故障、磁盘故障、CPU 缓存问题或其他硬件错误。
如果重启让它消失,我会非常怀疑硬件。如果没有,你可能在系统上遇到了一些非常奇怪的东西,比如一些第 3 方未打包的安装程序覆盖了原始的 C 库/动态链接器,那种奇怪。
安装 PostgreSQL(服务器和客户端工具)后,需要 运行 以下命令作为 ROOT ("su")。关键步骤是启动 "service postgresql initdb" 并让它初始化您的 PostgreSQL 数据库。
如果您有任何错误,您需要删除空安装 "data" 目录并仔细阅读所有日志文件。
# service postgresql initdb
# systemctl enable postgresql
# systemctl start postgresql
完成上述操作后,验证 postgres 是否在 /var/lib/pgsql 和 运行ning 进程 "ps -ef | grep postgres"(它在端口 5432 上)
如果您 运行 遇到任何其他问题,您可能需要创建或修改 postgres user/password 或清理 postgres 数据目录。