CodeGym /课程 /SQL SELF /pg_dump创建基础备份

pg_dump创建基础备份

SQL SELF
第 43 级 , 课程 2
可用

pg_dump 是PostgreSQL自带的命令行工具,可以把数据库导出成备份文件。这个文件可以只包含数据库结构、只包含数据,或者两者都有。

pg_dump最大的优点是可以让你在服务器之间迁移数据、在崩溃后恢复数据库,或者单纯做个长期存档。注意,这个工具更适合做逻辑备份(用SQL语句),而不是直接拷贝数据库文件那种物理备份。

pg_dump命令的基本语法

想用pg_dump做备份,只要在终端里敲下面这条命令:

pg_dump -U username -d database_name -f backup_file.sql

来拆解一下命令里的各个部分:

  • -U username — 指定用哪个PostgreSQL用户连接数据库。
  • -d database_name — 指定要备份哪个数据库。
  • -f backup_file.sql — 指定备份文件保存到哪里,可以是绝对路径也可以是相对路径。

举个例子:假如你有个数据库叫university,想把它备份到university_backup.sql文件里。命令如下:

pg_dump -U postgres -d university -f university_backup.sql

这时候PostgreSQL会让你输入postgres用户的密码,才能访问数据。

小贴士:如果你在本地服务器上操作,不想每次都输密码,可以配置.pgpass文件。去看看PostgreSQL官方文档,里面有详细说明。

参数和用法

pg_dump这个工具很灵活,可以根据你的需求调整各种备份方式:

  1. 只备份数据库结构

如果你只想保存数据库结构(比如要在新服务器上搭环境),用--schema-only参数。命令示例:

pg_dump -U postgres -d university --schema-only -f university_schema.sql

这样会生成一个只包含CREATE TABLECREATE INDEX等语句的SQL脚本,不带数据。

  1. 只备份数据

有时候你只想保存数据,不要结构。这种情况用--data-only参数:

pg_dump -U postgres -d university --data-only -f university_data.sql

生成的文件会包含INSERT INTO语句,可以用来恢复你的数据。

  1. 压缩备份文件

如果你的数据库表和数据很多,备份文件可能会很大。想省点空间,可以用--compress参数:

pg_dump -U postgres -d university -f university_backup.sql --compress=6

压缩级别用0(不压缩)到9(最强压缩)的数字。注意,压缩级别越高,备份时间也会更长。

  1. 导出成二进制格式

如果你想用更快的方式恢复,可以把备份保存成二进制格式,而不是SQL文本:

pg_dump -U postgres -d university -Fc -f university_backup.dump

-Fc参数表示用Custom格式,这种格式可以用pg_restore工具恢复。

备份示例

完整备份数据库

比如你有个数据库叫company,想把结构和数据都备份下来:

pg_dump -U postgres -d company -f company_backup.sql

只备份一张表

如果你只想备份数据库里的某一张表,用-t参数:

pg_dump -U postgres -d company -t employees -f employees_backup.sql

这个文件只会包含employees表的结构和数据。

备份多张表

想备份多张表,就多加几个-t参数:

pg_dump -U postgres -d company -t employees -t departments -f selected_tables_backup.sql

压缩备份

想省空间,可以用--compress参数,或者直接用压缩格式:

pg_dump -U postgres -d company -Fc -f company_backup_compressed.dump

实用建议

检查备份文件大小。如果备份文件特别小,可能哪里出错了。可以加--verbose参数,看看备份过程的详细信息。

自动化备份流程。cron或者pg_cron定时做备份。记得定期清理老备份,别让硬盘爆了。

校验备份有效性。在测试服务器上恢复一下备份,看看能不能用,别等到真出事才发现备份坏了。

你可能遇到的错误

认证失败。如果你没写对用户名或者忘了密码,pg_dump会报错。建议配置好.pgpass文件,自动登录。

连接失败。如果PostgreSQL服务器没开,或者数据库名写错了,工具就备不了份。检查下数据库名和服务器状态。

权限问题。你用的用户必须有权限读数据库结构和数据。能用管理员账号就用管理员账号吧。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION