浅谈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)
相关推荐
by2099918 小时前
Linux 基础指令与文件操作
linux·1024程序员节
2401_8685347819 小时前
软考网络规划设计师SSL协议知识点详解
服务器·网络
Escalating_xu19 小时前
【Linux 网络编程】手写序列化与反序列化:从 x op y 到能校验的文本协议
linux·运维·网络
润滑卫士19 小时前
油液多参数融合故障诊断:数据级融合与决策级融合方法
运维
李纲明20 小时前
WordPress 后台登录马上被踢回登录页:Cookie 域、HTTPS、盐值和页面缓存怎么查
运维·缓存·https·php·wordpress·cookie
todoitbo20 小时前
在 Ubuntu ARM64 上运行 Q1 V3.0 MuJoCo 模型:加载、步进和单执行器响应
linux·运维·ubuntu·ai·机器人·仿真教程·启元
AR-26710-21 小时前
Linux Day26——传输层与三次握手
linux·运维
隔窗听雨眠1 天前
PostgreSQL单表从Windows迁移到Linux:差异剖析、方案对比与全流程实战
linux·windows·postgresql
xinruoqianqiu1 天前
记录Linux
linux
额额额对了1 天前
嵌入式 Linux 实战:i.MX6ULL 上的 CAN 通信与摄像头采集
linux·运维·服务器