pgsql-备份与恢复
在 PostgreSQL 中,备份主要分为两种:逻辑备份(导出的 SQL 文件,易读、跨版本好用)和物理备份(直接拷贝底层文件,快但不易读) pg_dump单库备份 pg_dump是一个命令行工具
pgsql-备份与恢复
发布时间:2026-04-16 (1天前)

在 PostgreSQL 中,备份主要分为两种:逻辑备份(导出的 SQL 文件,易读、跨版本好用)和物理备份(直接拷贝底层文件,快但不易读)

pg_dump单库备份

pg_dump是一个命令行工具,它会把数据库里的表结构、数据、序列、权限等全部变成一段长长的 SQL 脚本。

打开你电脑的终端(CMD 或 PowerShell),不需要进入 psql。

# 格式:pg_dump -U [用户名] -d [数据库名] > [备份文件名.sql]
pg_dump -U postgres -d db > db_0414.sql
  • -U: 指定用户名(通常用超级用户 postgres)。
  • -t: 只备份某张表(例如:-t cloud_files)。
  • -n: 只备份某个模式(例如:-n storage)。
  • -F: 指定格式。-Fc 会生成自定义二进制压缩格式,体积更小,且支持并行恢复(推荐!)。
# 备份为压缩的二进制格式
pg_dump -U postgres -F c -d db > db_0414.bak

大小差距还是很大的

恢复

恢复的方式取决于你备份时的格式。

  1. 恢复纯文本 SQL 备份

如果你备份的是.sql文件,直接用psql 运行它即可:

# 格式:psql -U [用户名] -d [目标数据库] < [备份文件]
psql -U postgres -d db1 < db_0414.sql
# 这个库要先创建好
  1. 恢复二进制备份 (pg_restore)

如果你用了-Fc压缩格式,必须用专属的pg_restore 工具:

pg_restore -U postgres -d db2 -c db_0414.bak
  • -c 代表先清理(删除)旧表再恢复,防止冲突

pg_dumpall全库备份

如果你想把整个 PostgreSQL 实例里的所有数据库、所有的用户和权限(Role)一次性全带走,就要用这个:

set PGPASSWORD=root   # 不然就会导一个数据库输一次密码
pg_dumpall -U postgres > all_databases_backup.sql
# 格式:psql -U [用户名] -f [备份文件路径] [数据库名]
psql -U postgres -f all_databases_backup.sql postgres
  • -f: 代表 file,即指定要运行的 SQL 脚本文件。
  • postgres** (最后的参数)**:这是连接的初始数据库。因为pg_dumpall脚本内部包含了CREATE DATABASE\c(切换库) 的命令,所以你只需要先连上一个默认存在的库(比如postgres),它会自动帮你创建并切换到其他的库。

安全建议

以上就是pgsql的基础知识,关于数据库的安全,需要单独讲一下

因为我有几个学员的数据库被黑客攻击勒索了,希望大家看到这里可以重视起来

  1. 在云服务器上的数据库,一定不能开放端口,在上面的数据库只能云服务器上的服务本机连
  2. 一定不要设置弱密码,尽量复杂一点
  3. 改下云服务器默认的22ssh端口,比如改成10022,11222这些,可以有效的防止端口扫描
  4. 养成备份的好习惯,最好备份在其他地方

如果你本机想连远程的数据库,可以使用ssh隧道