postgresql 使用命令进行导入和导出

一般情况下,可以直接用 navicat 等工具进行导入和导出。
但是一般工具有局限性,比如导出不了 SERIAL 及其依赖的序列。
因此,我们使用 postgresql 自带的命令(如:pg_dump、pg_dumpall、pg_restore、pg_basebackup等)进行导入和导出。

  • pg_dump 用于单个数据库的备份和恢复
  • pg_dumpall 用于整个集群的备份
  • pg_basebackup 用于物理备份

参考文档

导出

1pg_dump -h <hostname> -p <port> -U <username> -d <dbname> -n <schemaname> -t <tablename> -j <njobs> -f <filename>

参数说明:

  • -h :主机名或IP。
  • -p :数据库服务的端口号。
  • -U :登录RDS PostgreSQL数据库的账号。
  • -d :指定要连接的数据库的名称,默认为postgres。
  • -n :指定数据库的模式,默认为public。
  • -t :指定导出的表名(可选)。
  • -j :同时执行备份作业的并发数(可选)。
  • -f :文件的存储路径。
  • -s :只储存对象,不保存数据。
  • -a :不储存对象,只保存数据。
  • -O :跳过对象所有权的恢复(如果备份后要恢复到其他数据库,并且对象所在的用户前后不一致,一定要加该选项)。
  • -c :清理(删除)数据库对象后再重新创建(该参数请谨慎使用,因为会导致原有数据的丢失!!!)。
  • –column-inserts :作为带有列名的INSERT命令转储数据。

常用示例:

 1# 备份tob数据库、多个模式下的所有表(或视图)
 2pg_dump -h 210.210.210.17 -p 5432 -U postgres -d tob -n public -n cent_glyyb_zygl_yswb_uat_schema -f d:/tables.sql
 3
 4# 备份tob数据库、public模式下的多个指定的表
 5pg_dump -h 210.210.210.17 -p 5432 -U postgres -d tob -t tj_jj_province_month_jk -t backup_tables -f d:/tables.sql
 6
 7# 备份test数据库、basedata模式下的所有表(或视图)
 8pg_dump -h 127.0.0.1 -p 5432 -U root -d test -n basedata > d:/backup.sql
 9
10# 备份test数据库、basedata模式下的所有表(或视图):只生成结构,不保存数据;并去掉对象的所有权
11pg_dump -h 127.0.0.1 -p 5432 -U root -d test -n basedata -s -O > d:/backup.sql
12
13# 备份test数据库、basedata模式下的所有表的数据:不生成结构
14pg_dump -h 127.0.0.1 -p 5432 -U root -d test -n basedata -a > d:/backup.sql

导入

1psql -h <hostname> -p <port> -U <username> -d <dbname> -f <filename>

常用示例:

1# 导入结构和数据到test数据库
2psql -h 127.0.0.1 -p 5432 -U root -d test -f d:/tables.sql

注意事项

  • 迁移时注意版本兼容性。