我正在研究 postgresql 代码(服务器端)。我按照官方教程从源代码安装了一个版本: http ://www.postgresql.org/docs/8.4/interactive/install-short.html
我对代码做了同样的修改,所以我需要再次安装 postgresql,但这次是我的版本。
我在/usr/local/pgsql2/中重命名了/usr/local/pgsql /并且我做到了:
make distclean
./configure
make
sudo make install
sudo mkdir /usr/local/pgsql/data
sudo chown darkcoffeelinux /usr/local/pgsql/data
直到现在一切都很顺利,但是有了命令
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/
我收到了这个错误:
The files belonging to this database system will be owned by user "darkcoffeelinux".
This user must also own the server process.
The database cluster will be initialized with locale en_US.UTF-8.
The default database encoding has accordingly been set to UTF8.
The default text search configuration will be set to "english".
fixing permissions on existing directory /usr/local/pgsql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 24MB
creating configuration files ... ok
creating template1 database in /usr/local/pgsql/data/base/1 ... ok
initializing pg_authid ... Segmentation fault (core dumped)
child process exited with exit code 139
initdb: removing contents of data directory "/usr/local/pgsql/data"
附加信息:我使用的是 kubuntu,postgresql 8.4.15
我认为权限是正确的,否则您将不会到达这里。
我的猜测是您所做的修改导致了问题。鉴于这是一个分段错误,情况尤其如此。您真正需要做的是查看转储内核时的调用堆栈,看看您是否可以隔离代码中发生这种情况的位置,然后回溯以查看您所做的修改可能导致了这种情况。鉴于您已经修改了代码,第一步是检查您是否可以按照 kgrittn 的说明进行重现,但我敢打赌,这只会在您修改后的代码中出现。
下一步可能是在调试器中运行 initdb 并查看崩溃时的情况。在这一点上,标准的 C 调试实践确实是您最好的选择。
initdb
并且服务器进程本身必须以拥有数据目录的同一操作系统用户身份运行。不要忘记将该目录的权限设置为仅允许该用户访问 (chmod 700
)。关于分段错误——您是否可以使用未修改的 PostgreSQL 版本导致它,或者这可能是您所做的某些定制中的错误的结果?你能得到它的核心转储吗?