ubuntu22.04编译安装postgresql17.5

很多年前在centos系统上编译过一个版本,现在基本都改用ubuntu,所以在ubuntu22.04上再次进行编译并记录,此次编译的最新的17.5的版本,也包含了使用system管理postgresql服务的配置撰写。
以下所有操作均切换到root账户进行的操作,首先我们先安装基础依赖包

apt-get install -y systemtap-sdt-dev libicu-dev libreadline-dev zlib1g-dev libssl-dev libxml2-dev libldap-dev libsystemd-dev tcl-dev libpython3-dev libperl-dev libicu-dev pkg-config bison flex

postgresql可以在这里进行下载:https://ftp.postgresql.org/pub/source/
下来我们就进行postgresql的编译安装和基础配置

wget https://ftp.postgresql.org/pub/source/v17.5/postgresql-17.5.tar.gz
tar -zxvf postgresql-17.5.tar.gz
groupadd postgres
mkdir -p /home/postgres
useradd -d /home/postgres -s /sbin/nologin postgres
mkdir -p /data/pgsql
chown -R postgres:postgres /data/pgsql
mkdir -p /usr/local/pgsql
cd postgresql-17.5
./configure --prefix=/usr/local/pgsql
make -j$(nproc)
make install

上述编译完成以后我们将postgresql的执行目录添加到$PATH,最好是添加到/etc/profile中方便后续命令的执行。

export PATH=$PATH:/usr/local/pgsql/bin

我们然后需要切换到postgres账户进行数据的初始化

su - postgres
cd /usr/local/pgsql/bin
./initdb -D /data/pgsql

202507141100222190954522.png

看到上述提示可以使用pg_ctl命令进行postgresql的启动

pg_ctl -D /data/pgsql -l logfile start

我们退出postgres账户,自己撰写一个开机启动服务,用于systemd管理postgresql服务。
保存退出后我们撰写pgsqld.service服务用于systemd管理

vim /usr/lib/systemd/system/pgsqld.service
[Unit]
Description=PostgreSQL
After=network.target

[Service]
Type=forking
User=postgres
Group=postgres
ExecStart=/usr/local/pgsql/bin/pg_ctl start -D /data/pgsql
ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D /data/pgsql
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D /data/pgsql
PrivateTmp=true

[Install]
WantedBy=multi-user.target

保存退出以后我们试试用服务管理postgresql

systemctl daemon-reload
systemctl start pgsqld
systemctl status pgsqld
systemctl enable pgsqld

202507141101301283262673.png

postgresql还有一些基本配置可以查看/data/pgsql/postgresql.conf
最后我们修改postgresql的账户密码

/usr/local/pgsql/bin/psql -U postgres

提示报错

psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
Is the server running locally and accepting connections on that socket?

我们需要做一条软链接解决这个问题

ln -s /tmp/systemd-private-3675952e3e044f84a9f3eacd248b04d7-pgsqld.service-gsLHma/tmp/.s.PGSQL.5432 /tmp/.s.PGSQL.5432

然后再次使用登录命令就发现可以正常登录了,使用如下命令进行密码的修改

ALTER USER postgres WITH PASSWORD '你的密码';

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/1086

评论列表

0%