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

相关推荐
zzzsde2 小时前
【Linux】库的制作和使用(3)ELF&&动态链接
linux·运维·服务器
CQU_JIAKE2 小时前
4.3【A]
linux·运维·服务器
AI周红伟2 小时前
OpenClaw是什么?OpenClaw能做什么?OpenClaw详细介绍及保姆级部署教程-周红伟
大数据·运维·服务器·人工智能·微信·openclaw
qing222222222 小时前
Linux中修改mysql数据表
linux·运维·mysql
Alvin千里无风2 小时前
在 Ubuntu 上从源码安装 Nanobot:轻量级 AI 助手完整指南
linux·人工智能·ubuntu
TechWayfarer2 小时前
科普:IP归属地中的IDC/机房/家庭宽带有什么区别?
服务器·网络·tcp/ip
杨云龙UP2 小时前
Oracle 中 NOMOUNT、MOUNT、OPEN 怎么理解? 在不同场景下如何操作?_20260402
linux·运维·数据库·oracle
Amctwd3 小时前
【Linux】OpenCode 安装教程
linux·运维·服务器
KOYUELEC光与电子努力加油3 小时前
JAE日本航空端子推出支持自走式机器人的自主充电功能浮动式连接器“DW15系列“方案与应用
服务器·人工智能·机器人·无人机
jzwugang3 小时前
postgresql链接详解
数据库·postgresql