浅谈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
相关推荐
shining11 小时前
当拿到一个新服务器时所需准备工作
linux·程序员
门思科技12 小时前
LoRaWAN项目无需NS和平台?一体化网关如何简化部署与成本
服务器·网络·物联网
Bruce_Liuxiaowei12 小时前
顺藤摸瓜:一次从防火墙告警到设备实物的溯源实战
运维·网络·网络协议·安全
maosheng114612 小时前
linux的综合教程(搭建论坛教程)
linux
IpdataCloud12 小时前
效果广告中点击IP与转化IP不一致?用IP查询怎么做归因分析?
运维·服务器·网络
Deitymoon12 小时前
linux——TCPIP协议原理
linux·网络
独小乐12 小时前
018.使用I2C总线EEPROM|千篇笔记实现嵌入式全栈/裸机篇
linux·笔记·单片机·嵌入式硬件·arm·信息与通信
SPC的存折13 小时前
2、Docker命令与镜像、容器管理
linux·运维·服务器·docker·容器·eureka
D4c-lovetrain13 小时前
Linux个人心得26 (redis主从复制全流程,详细版)
linux·运维·服务器
晴天¥13 小时前
达梦数据库共享存储集群搭建(DSC双节点+Openfiler-IP SAN存储)
linux·数据库·达梦数据库