在 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
大小差距还是很大的

恢复
恢复的方式取决于你备份时的格式。
- 恢复纯文本 SQL 备份
如果你备份的是.sql文件,直接用psql 运行它即可:
# 格式:psql -U [用户名] -d [目标数据库] < [备份文件]
psql -U postgres -d db1 < db_0414.sql
# 这个库要先创建好
- 恢复二进制备份 (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的基础知识,关于数据库的安全,需要单独讲一下
因为我有几个学员的数据库被黑客攻击勒索了,希望大家看到这里可以重视起来
- 在云服务器上的数据库,一定不能开放端口,在上面的数据库只能云服务器上的服务本机连
- 一定不要设置弱密码,尽量复杂一点
- 改下云服务器默认的22ssh端口,比如改成10022,11222这些,可以有效的防止端口扫描
- 养成备份的好习惯,最好备份在其他地方
如果你本机想连远程的数据库,可以使用ssh隧道
