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

相关推荐
小政同学6 分钟前
【NFS故障】共享的文件无法执行
linux·运维·服务器
不会写DN15 分钟前
受保护的海报图片读取方案 - 在不公开静态资源目录下如何获取静态资源
服务器
AI木马人26 分钟前
3.【Prompt工程实战】如何设计一个可复用的Prompt系统?(避免每次手写提示词)
linux·服务器·人工智能·深度学习·prompt
高铭杰32 分钟前
neon源码分析(4)slru页面redo与pg的区别
postgresql·neon
ch3nyuyu38 分钟前
Ubuntu(乌班图)基础指令
linux·运维·网络
minglie11 小时前
gcc编译器汇总
linux
挽安学长1 小时前
保姆级教程,通过GACCode使用Claude Code Desktop!
运维·服务器
firstacui2 小时前
MGRE实验
运维·服务器·网络
白菜欣3 小时前
Linux —《开发三件套:gcc/g++、gdb、make/Makefile 全解析》
linux·运维
senijusene3 小时前
基于 imx6ull平台按键驱动开发:input子系统+中断子系统+platform总线
linux·驱动开发