postgres 导出导入(基于数据库,模式,表)
在 PostgreSQL 中,导出和导入数据库、模式(schema)或表的数据可以使用多种工具和方法。以下是常用的命令和步骤,分别介绍如何导出和导入整个数据库、特定的模式以及单个表的数据。
一、导出数据
1. 使用 pg_dump 导出整个数据库
 
pg_dump 是 PostgreSQL 提供的用于导出数据库的工具。要导出整个数据库,可以使用以下命令:
pg_dump -U [用户名] -h [主机地址] -p [端口] [数据库名] -F c -b -v -f [输出文件路径].dump
参数说明:
- -U [用户名]:指定连接数据库的用户名。
- -h [主机地址]:指定数据库服务器的主机地址(默认是- localhost)。
- -p [端口]:指定数据库服务器的端口(默认是- 5432)。
- [数据库名]:要导出的数据库名称。
- -F c:指定输出文件的格式为自定义格式(推荐用于后续的恢复)。
- -b:包括大对象(blobs)。
- -v:显示详细的输出信息。
- -f [输出文件路径].dump:指定输出的文件名和路径。
示例:
pg_dump -U postgres -h localhost -p 5432 mydatabase -F c -b -v -f /path/to/mydatabase.dump
2. 使用 pg_dump 导出特定的模式
 
如果只需要导出数据库中的某个模式(schema),可以使用 -n 参数指定模式名称:
pg_dump -U [用户名] -h [主机地址] -p [端口] [数据库名] -n [模式名] -F c -b -v -f [输出文件路径].dump
示例:
pg_dump -U postgres -h localhost -p 5432 mydatabase -n public -F c -b -v -f /path/to/public_schema.dump
3. 使用 pg_dump 导出特定的表
 
如果只需要导出某个表的数据,可以使用 -t 参数指定表名:
pg_dump -U [用户名] -h [主机地址] -p [端口] [数据库名] -t [表名] -F c -b -v -f [输出文件路径].dump
示例:
pg_dump -U postgres -h localhost -p 5432 mydatabase -t users -F c -b -v -f /path/to/users_table.dump
4. 使用 pg_dump 导出为 SQL 文件
 
如果需要导出为 SQL 格式的脚本文件,可以使用 -F p 参数:
pg_dump -U [用户名] -h [主机地址] -p [端口] [数据库名] -F p -b -v -f [输出文件路径].sql
示例:
pg_dump -U postgres -h localhost -p 5432 mydatabase -F p -b -v -f /path/to/mydatabase.sql
二、导入数据
1. 使用 pg_restore 导入整个数据库
 
如果使用 pg_dump 的自定义格式(-F c)导出的数据,可以使用 pg_restore 进行导入:
pg_restore -U [用户名] -h [主机地址] -p [端口] -d [目标数据库名] -v [备份文件路径].dump
参数说明:
- -d [目标数据库名]:指定要导入到的目标数据库。如果目标数据库不存在,可以使用- -C参数创建它。
示例:
pg_restore -U postgres -h localhost -p 5432 -d mydatabase -v /path/to/mydatabase.dump
如果目标数据库不存在,可以添加 -C 参数:
pg_restore -U postgres -h localhost -p 5432 -C -d postgres -v /path/to/mydatabase.dump
2. 使用 psql 导入 SQL 文件
 
如果导出的数据是 SQL 格式的脚本文件,可以使用 psql 进行导入:
psql -U [用户名] -h [主机地址] -p [端口] -d [目标数据库名] -f [SQL文件路径].sql
示例:
psql -U postgres -h localhost -p 5432 -d mydatabase -f /path/to/mydatabase.sql
3. 使用 pg_restore 导入特定的模式或表
 
如果备份文件中包含多个模式或表,可以使用 -n 或 -t 参数指定要恢复的模式或表:
pg_restore -U [用户名] -h [主机地址] -p [端口] -d [目标数据库名] -n [模式名] -v [备份文件路径].dump
或
pg_restore -U [用户名] -h [主机地址] -p [端口] -d [目标数据库名] -t [表名] -v [备份文件路径].dump
示例:
pg_restore -U postgres -h localhost -p 5432 -d mydatabase -n public -v /path/to/public_schema.dump
4. 导入时注意事项
- 目标数据库:确保目标数据库已存在,或者使用 -C参数在导入时创建它。
- 权限:确保执行导入操作的用户具有足够的权限来创建对象和插入数据。
- 依赖关系:如果导出的数据包含多个表或对象,确保导入顺序正确,以满足依赖关系。
- 大对象:如果备份中包含大对象(blobs),确保使用支持大对象的参数进行导入。
三、示例总结
导出整个数据库:
pg_dump -U postgres -h localhost -p 5432 mydatabase -F c -b -v -f /path/to/mydatabase.dump
导出特定的模式:
pg_dump -U postgres -h localhost -p 5432 mydatabase -n public -F c -b -v -f /path/to/public_schema.dump
导出特定的表:
pg_dump -U postgres -h localhost -p 5432 mydatabase -t users -F c -b -v -f /path/to/users_table.dump
导入整个数据库:
pg_restore -U postgres -h localhost -p 5432 -d mydatabase -v /path/to/mydatabase.dump
导入 SQL 文件:
psql -U postgres -h localhost -p 5432 -d mydatabase -f /path/to/mydatabase.sql
通过以上命令和步骤,你可以根据需要导出和导入 PostgreSQL 数据库、模式或表的数据。
