浅谈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
相关推荐
Qt程序员2 小时前
深入理解 Linux 内核 RCU 机制:从原理到实现
linux·c++·内核·linux内核·rcu
黄焖鸡能干四碗2 小时前
企业数据架构、应用架构、技术架构设计方案(PPT文件)
大数据·运维·数据库·安全·架构·需求分析
钝挫力PROGRAMER2 小时前
Linux systemd服务获取不到用户环境变量
linux·运维·python
志栋智能2 小时前
故障发现滞后、处置不及时引发的业务中断与数据风险,超自动化巡检帮您解决
运维·自动化
gechunlian882 小时前
Nginx多域名,多证书,多服务配置,实用版
运维·网络·nginx
Magic--2 小时前
Linux exec进程替换详解
linux·运维·服务器
道阻且长行则将至!2 小时前
Linux 轻量级桌面环境
linux·运维·服务器·桌面管理器·ubuntu轻量级桌面
qqty12172 小时前
Nginx反向代理出现502 Bad Gateway问题的解决方案
运维·nginx·gateway
YMWM_2 小时前
服务器上的cursor同步本地插件
运维·服务器·chrome