在 Ubuntu 22.04 上安装 PostgreSQL

PostgreSQL 部署与数据库迁移方案,针对:

  • 服务器:阿里云轻量应用服务器 Ubuntu 22.04

  • 数据库:PostgreSQL

  • 场景:

    • ✅ 确保服务器正确安装 PostgreSQL

    • ✅ 本地 → 服务器 数据迁移

    • ✅ 服务器 → 本地 数据迁移

    • ✅ 结构 + 数据完整迁移


一、在 Ubuntu 22.04 上安装 PostgreSQL

1️⃣ 安装官方版本(推荐方式)

Ubuntu 自带版本可能偏旧,建议使用 PostgreSQL 官方源。

复制代码
sudo apt update
sudo apt install postgresql postgresql-contrib postgresql-client

安装完成后检查:

复制代码
psql --version

查看服务状态:

复制代码
sudo systemctl status postgresql

如果未运行:

复制代码
sudo systemctl start postgresql
sudo systemctl enable postgresql

二、创建数据库与用户

进入 postgres 用户:

复制代码
sudo -u postgres psql

创建数据库和用户:

复制代码
CREATE DATABASE game;
CREATE USER gameuser WITH ENCRYPTED PASSWORD '强密码';
GRANT ALL PRIVILEGES ON DATABASE game TO gameuser;

退出:

复制代码
\q

三、确保 PostgreSQL 只允许本机访问(生产建议)

编辑:

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

确认:

复制代码
listen_addresses = 'localhost'

编辑:

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

确认:

复制代码
local   all             all                                     peer
host    all             all             127.0.0.1/32            scram-sha-256

重启:

复制代码
sudo systemctl restart postgresql

⚠️ 不要开放 0.0.0.0


四、数据库迁移原理

PostgreSQL 推荐使用:

工具 用途
pg_dump 导出数据库
pg_restore 恢复数据库
psql 执行 SQL
pg_dumpall 导出全部数据库

五、本地 → 服务器 迁移

✅ 方法一(推荐):使用 pg_dump 自定义格式

1️⃣ 在本地导出

复制代码
pg_dump -U postgres -h localhost -Fc game > game.dump

参数说明:

参数 说明
-Fc 自定义格式(推荐)
-U 用户
-h 主机

2️⃣ 上传到服务器

复制代码
scp game.dump user@服务器IP:/home/user/

3️⃣ 在服务器恢复

复制代码
pg_restore -U gameuser -d game -c game.dump

如果提示权限问题,可以:

复制代码
sudo -u postgres pg_restore -d game -c game.dump

✅ 方法二:导出为 SQL 文件

导出:

复制代码
pg_dump -U postgres game > game.sql

上传后恢复:

复制代码
psql -U gameuser -d game -f game.sql

六、服务器 → 本地 迁移

1️⃣ 在服务器导出

复制代码
pg_dump -U gameuser -Fc game > game.dump

2️⃣ 下载到本地

复制代码
scp user@服务器IP:/home/user/game.dump .

3️⃣ 本地恢复

复制代码
pg_restore -U postgres -d game -c game.dump

七、直接远程导出(无需手动拷贝)

如果服务器允许远程连接(生产不建议长期开放):

从本地直接导出服务器数据库

复制代码
pg_dump -U gameuser -h 服务器IP -Fc game > game.dump

或直接恢复到服务器

复制代码
pg_restore -U gameuser -h 服务器IP -d game game.dump

⚠️ 必须开放 5432,并修改 postgresql.conf

生产环境不推荐。


八、推荐生产迁移方式(最安全)

使用 SSH 隧道:

复制代码
ssh -L 5433:localhost:5432 user@服务器IP

然后本地执行:

复制代码
pg_dump -U gameuser -h localhost -p 5433 -Fc game > game.dump

这样数据库仍然只监听 localhost。


九、ASP.NET Core 数据库迁移(EF Core 场景)

如果你使用 Entity Framework Core:

在服务器执行:

复制代码
dotnet ef database update

或者在应用启动时自动迁移:

复制代码
context.Database.Migrate();

但生产环境建议手动控制。


十、验证数据库是否正常

进入:

复制代码
psql -U gameuser -d game

查看表:

复制代码
\dt

查看数据:

复制代码
SELECT * FROM YourTable LIMIT 5;

十一、自动化备份(生产必须)

建议写定时任务:

复制代码
crontab -e

加入:

复制代码
0 2 * * * pg_dump -U gameuser -Fc game > /var/backups/game_$(date +\%F).dump

每日凌晨 2 点备份。


十二、迁移策略建议(开发/生产分离)

环境 策略
本地开发 可随意重建数据库
测试服务器 使用 dump 迁移
生产服务器 严格版本化迁移(EF Migration)
备份 每日 dump

十三、推荐你的实际做法

建议:

  1. 服务器 PostgreSQL 只监听 localhost

  2. 使用 pg_dump -Fc 迁移

  3. 使用 systemd 定时备份

  4. 不开放 5432

  5. 使用 EF Core Migration 管理结构

相关推荐
Julien200410 分钟前
自动挂载网络附加存储
linux·服务器·网络
codigger33 分钟前
服务器又卡了?一篇讲透 Linux 性能排查(基础四件套 + perf/strace/火焰图)
linux·后端·性能优化
顶点多余1 小时前
9.18 面试题总结 --- 绿盟
linux·面试
Ivanqhz1 小时前
Slope One 算法详解:与矩阵分解、共现矩阵的异同
java·服务器·网络·人工智能·深度学习
挖掘狂人1 小时前
当生产环境"变慢",我用这套 perf + strace 30 分钟定位瓶颈
linux·运维·性能优化
l1t1 小时前
DeepSeek总结的 pgColumnar 1.0-alpha4 发布说明
数据库·postgresql
Logintern092 小时前
“以一致的顺序获取锁“是预防死锁最核心、最有效的手段
python·postgresql·锁机制
Wang's Blog2 小时前
Java 项目实战: 外卖平台-数据库环境搭建与十一张表结构解析
java·服务器·redis
王六米。2 小时前
RAG知识库建设 文档解析 切分与索引如何衔接
服务器·前端·网络·企业数字化转型·智钳智能盒子
问简2 小时前
Ubuntu 26 + Windows 10 双系统 NTFS 共享盘笔记
ubuntu