浅谈Linux上安装 PostgreSQL数据库

1.下载数据库

打开 PostgreSQL 官网 https://www.postgresql.org/,点击菜单栏上的 Download ,可以看到这里包含了很多平台的安装包,包括 Linux、Windows、Mac OS等 。

Linux 我们可以看到支持 Ubuntu 和 Red Hat 等各个平台,点击具体的平台链接,即可查看安装方法:

点击上图中的 file browser,我们还能下载 PostgreSQL 最新的源码。

2.源码编译安装

  1. # 下载源码包(以16.0版本为例)
  2. wget https://ftp.postgresql.org/pub/source/v16.0/postgresql-16.0.tar.gz
  3. tar -xzf postgresql-16.0.tar.gz
  4. cd postgresql-16.0
  5. # 配置编译选项
  6. ./configure --prefix=/usr/local/pgsql16 \
  7. --with-openssl \
  8. --with-libxml \
  9. --with-libxslt
  10. # 编译并安装(建议使用-j参数加速,如-j4表示4线程)
  11. make -j$(nproc)
  12. sudo make install
  13. # 初始化数据库集群
  14. sudo mkdir -p /var/lib/pgsql/16/data
  15. sudo chown postgres:postgres /var/lib/pgsql/16/data
  16. sudo -u postgres /usr/local/pgsql16/bin/initdb -D /var/lib/pgsql/16/data

3.安装后配置优化

安装完成后需进行三项关键配置:修改访问权限、配置远程连接及调整内存参数。

3.1 修改访问权限

PostgreSQL默认仅允许本地连接,需修改pg_hba.conf文件(路径因安装方式而异):

  1. # 包管理器安装路径(Ubuntu)
  2. sudo nano /etc/postgresql/15/main/pg_hba.conf
  3. # 添加以下行允许所有IP通过密码连接
  4. host all all 0.0.0.0/0 md5

修改后需重启服务生效:sudo systemctl restart postgresql

3.2 配置远程连接

编辑postgresql.conf文件调整监听地址:

  1. sudo nano /etc/postgresql/15/main/postgresql.conf
  2. # 修改以下参数
  3. listen_addresses = '*' # 允许所有IP连接
  4. # 或指定IP列表,如 listen_addresses = '192.168.1.100,127.0.0.1'

3.3 调整内存参数

对于生产环境,需优化共享内存和缓存设置。在postgresql.conf中修改:

  1. shared_buffers = 4GB # 通常设为系统内存的25%-40%
  2. work_mem = 16MB # 每个查询操作使用的内存
  3. maintenance_work_mem = 1GB # 维护操作(如VACUUM)使用的内存
  4. effective_cache_size = 12GB # 操作系统缓存的预估值

修改后需重新加载配置:sudo systemctl reload postgresql

4.验证数据库

编译安装需手动管理服务,建议创建systemd服务文件实现开机自启。

安装完毕后,系统会创建一个数据库超级用户 postgres,密码为空。

sudo -i -u postgres

设置密码:

ALTERUSER postgres WITH PASSWORD 'your_secure_password';

这时使用以下命令进入 postgres,输出以下信息,说明安装成功:

~$ psql

psql (9.5.17)

Type "help" for help.

postgres=#

输入以下命令退出 PostgreSQL 提示符:

\q

PostgreSQL 安装完成后默认是已经启动的,但是也可以通过下面的方式来手动启动服务。

sudo /etc/init.d/postgresql start # 开启

sudo /etc/init.d/postgresql stop # 关闭

sudo /etc/init.d/postgresql restart # 重启

5.常见问题解决方案

5.1 端口冲突问题

若5432端口被占用,可通过以下步骤排查:

  1. # 查看占用端口的进程
  2. sudo netstat -tulnp | grep 5432
  3. # 终止冲突进程(示例)
  4. sudo kill -9 <PID>
  5. # 或修改PostgreSQL监听端口
  6. sudo nano /etc/postgresql/15/main/postgresql.conf
  7. # 修改 port = 5433

5.2 认证失败问题

若出现psql: FATAL: password authentication failed错误,需检查:

  1. 确认密码是否正确(安装时设置的密码)
  2. 检查pg_hba.conf是否允许当前IP的连接方式(如md5认证)
  3. 确认用户是否存在:sudo -u postgres psql -l

5.3 性能瓶颈优化

对于高并发场景,建议:

  1. 增加max_connections(默认100,建议根据负载调整)
  2. 启用连接池(如PgBouncer)
  3. 定期执行VACUUM FULL或设置自动清理(autovacuum = on
相关推荐
小猿姐3 小时前
唯品会大规模数据库云原生实践:基于 KubeBlocks 管理数千实例的统一运维之路
运维·elasticsearch·云原生
七歌杜金房8 小时前
我终于又有了自己的 Linux 电脑
linux·debian·mac
SkyWalking中文站16 小时前
认识 Horizon UI · 5/17:3D 基础设施地图
运维·监控·自动化运维
tntxia1 天前
linux curl命令详解_curl详解
linux
扛枪的书生1 天前
Linux 网络管理器用法速查
linux
SkyWalking中文站2 天前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控
顺风尿一寸2 天前
Java Socket 内核之旅:从 SocketChannel.read() 到 tcp_recvmsg 与 epoll 的完整调用链路
linux
雪梨酱QAQ2 天前
Kubeneters HA Cluster部署
运维
江华森2 天前
Spring Cloud 微服务全栈实战:从 Eureka 到 Docker Compose 一文贯通
运维
江华森2 天前
Matplotlib 数据绘图基础入门
运维