Ubuntu22 安装PostgreSQL

Ubuntu 22.04 安装 PostgreSQL 全流程(含踩坑 + 优化 + 远程连接)

适用于:个人开发 / 小型服务 / 云服务器部署

环境:Ubuntu 22.04 + PostgreSQL


📌 一、为什么选择 PostgreSQL?

PostgreSQL 是一个企业级开源关系型数据库,相比 MySQL:

  • 更强的 SQL 标准支持
  • 更适合复杂查询 / 分析
  • JSON / GIS / 扩展能力强
  • 数据一致性更严谨

👉 适合场景:

  • Web 后端(Django / Node / Go)
  • 数据分析系统
  • 日志 / 监控存储
  • 小型 SaaS 项目

🛠️ 二、安装 PostgreSQL

1. 更新系统

复制代码
sudo apt update && sudo apt upgrade -y

2. 安装 PostgreSQL

复制代码
sudo apt install postgresql postgresql-contrib -y

✅ 三、验证安装

复制代码
sudo systemctl status postgresql

👉 正常状态:

复制代码
active (running)

⚠️ 四、重要认知(新手必踩坑)

❗ sudo 要的不是数据库密码!

执行:

复制代码
sudo systemctl restart postgresql

提示输入密码时:

👉 输入的是 Linux 系统用户密码

❌ 不是 PostgreSQL 的密码


❗ postgres 默认没有密码

默认登录方式是:

复制代码
sudo -u postgres psql

原因:

👉 使用的是 peer 认证(系统用户信任)


🧑‍💻 五、进入数据库

复制代码
sudo -i -u postgres
psql

退出:

复制代码
\q

🏗️ 六、创建数据库 & 用户(推荐)

复制代码
-- 创建用户
CREATE USER myuser WITH PASSWORD 'mypassword';

-- 创建数据库
CREATE DATABASE mydb OWNER myuser;

-- 授权
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

🔐 七、修改认证方式(关键)

默认是 peer(本地免密),需要改成密码登录。

编辑配置:

复制代码
sudo nano /etc/postgresql/14/main/pg_hba.conf

找到:

复制代码
local   all   all   peer

改为:

复制代码
local   all   all   md5

🌐 八、开启远程访问(服务器必做)

1. 修改监听地址

复制代码
sudo nano /etc/postgresql/14/main/postgresql.conf

修改:

复制代码
listen_addresses = '*'

2. 配置访问规则

复制代码
sudo nano /etc/postgresql/14/main/pg_hba.conf

新增:

复制代码
host    all    all    0.0.0.0/0    md5

3. 重启服务

复制代码
sudo systemctl restart postgresql

4. 开放端口

复制代码
sudo ufw allow 5432/tcp

🧪 九、连接测试

本地:

复制代码
psql -U myuser -d mydb -h localhost

远程:

复制代码
psql -U myuser -d mydb -h 服务器IP

💡 十、1核1G服务器优化(实战重点)

👉 小内存机器必须优化,否则容易卡死

推荐配置

编辑:

复制代码
sudo nano /etc/postgresql/14/main/postgresql.conf

修改:

复制代码
max_connections = 20
shared_buffers = 128MB
work_mem = 2MB
maintenance_work_mem = 32MB
effective_cache_size = 512MB

开启 swap(强烈建议)

复制代码
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

持久化:

复制代码
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

🚨 十一、常见问题(踩坑合集)

❌ 1. 连接失败(Connection refused)

排查:

复制代码
ss -lntp | grep 5432

检查:

  • listen_addresses
  • 防火墙
  • 服务是否启动

❌ 2. 密码不生效

👉 90% 原因:

  • pg_hba.conf 还是 peer
  • 忘记重启服务

❌ 3. sudo 要密码但不知道

👉 解决:

复制代码
whoami

确认当前用户,然后使用该用户密码。


❌ 4. 服务器卡死 / OOM

👉 原因:

  • 连接数太多
  • 内存配置过大
  • 没有 swap
相关推荐
weelinking14 小时前
【产品】00_产品经理用Claude实现产品系列介绍
数据库·人工智能·sql·数据挖掘·github·产品经理
2301_8039346115 小时前
Go语言如何做网络爬虫_Go语言爬虫开发教程【指南】
jvm·数据库·python
秋915 小时前
windows中安装redis
数据库·redis·缓存
Cosolar16 小时前
万字详解:RAG 向量索引算法与向量数据库架构及实战
数据库·人工智能·算法·数据库架构·milvus
想唱rap16 小时前
IO多路转接之poll
服务器·开发语言·数据库·c++
SeaTunnel16 小时前
AI 让 SeaTunnel 读源码和调试过时了吗?
大数据·数据库·人工智能·apache·seatunnel·数据同步
凯瑟琳.奥古斯特16 小时前
数据冗余与规范化的本质[数据库原理]
开发语言·数据库·职场和发展
_ku_ku_17 小时前
数据库系统原理 · SQL 数据定义、更新及数据库编程 · 自学总结
数据库·oracle
Mortalbreeze17 小时前
深度理解文件系统 ---- 从磁盘存储到内核存储
大数据·linux·数据库
2301_8039346117 小时前
MySQL 字段类型选择规范指南
jvm·数据库·python