在 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 管理结构

相关推荐
锅包一切1 小时前
一、什么是Linux?
linux·运维·服务器·操作系统
ding_zhikai1 小时前
【个人日记】修复ubuntu屏幕显示不正常
linux·运维·ubuntu
rfidunion1 小时前
ubuntu下使用qemu模拟ARM(二)
linux·arm开发·ubuntu
大袁同学2 小时前
【基础开发工具】:掌握编译利器,构筑工程基石
linux
星星乘坐的船2 小时前
基于Kubernetes Python SDK实现Job创建
linux·python·kubernetes
W_Meng_H2 小时前
XXL-JOB - 集成 Python 执行器实战指南
linux·python
山峰哥2 小时前
数据库工程中的SQL调优实践:从索引策略到查询优化的深度探索
服务器·数据库·sql·性能优化·编辑器
袁袁袁袁满2 小时前
Docker后台日志和容器日志怎么查看?
linux·运维·服务器·docker·容器
数据知道2 小时前
《深入掌握PostgreSQL数据库》 - 专栏介绍和目录
数据库·postgresql