【postgresql】逻辑备份工具pg_dump

1.pg_dump介绍

pg_dump是一个逻辑备份PostgreSQL数据库的工具,目的是将一个PostgreSQL
数据库转储到一个脚本文件或者其他归档文件中,可以在数据库正在使用的时候
进行完整一致的备份,并不阻塞其他用户对数据库的访问(读或者写)

2.pg_dump特性

pg_dump只能备份单个数据库,不会导出角色和表空间相关的信息。
pg_dump是一个客户端,因此可以远程访问数据库进行备份,但备份存放在客户端。
pg_dump需要有备份表的读权限,建议使用数据库超级用户来备份。
pg_dump可以支持跨版本跨平台数据库导入。
pg_dump转储的是数据库快照,在pg_dump运行过程中发生的更新将不会被转储
pg_dump自定义文件格式必须与pg_restore配合使用来重建数据。
pg_dump工作的时候并不阻塞其他的对数据库的操作,但是会阻塞那些需要排他所的操作,
比如alter table;
pg_dump脚本转储是包含SQL命令的纯文本文件,可以用来重构数据库到它被转储时
的状态。

3.备份 

--不包含:create database 语句 
pg_dump -h 192.168.1.10 -U sspu sspudb > sspudb1.sql
--包含create database语句。
pg_dump -h 192.168.1.10 -U sspu -C sspudb > sspudb2.sql
--仅导出结果,不包含 create database语句。
pg_dump -h 192.168.1.10 -U sspu -s sspudb > sspudb3.sql
--导出指定数据库的结果并包含创建语句。
pg_dump -h 192.168.1.10 -U sspu -C -s sspudb > sspudb4.sql

4.恢复 

drop database sspudb;  

--需要使用管理员账号导入
[pgsql@oracle1:/postgresql/backup]$psql postgres -U postgres < sspudb2.sql
Password for user postgres: 

sspudb=> \dt
                    List of relations
 Schema |        Name         |       Type        | Owner 
--------+---------------------+-------------------+-------
 public | my_tab1             | table             | sspu
 public | sspudb_h1_p1        | table             | sspu
 public | sspudb_h1_p2        | table             | sspu
 public | sspudb_h1_p3        | table             | sspu
 public | sspudb_h1_p4        | table             | sspu
 public | sspudb_hash1        | partitioned table | sspu
 public | sspudb_list1        | partitioned table | sspu
 public | sspudb_list1_pit1   | table             | sspu
 public | sspudb_list1_pit2   | table             | sspu
 public | sspudb_list1_pother | table             | sspu
 public | sspudb_r1           | partitioned table | sspu
 public | sspudb_r1_p2010     | table             | sspu
 public | sspudb_r1_p2011     | table             | sspu
 public | sspudb_r1_p2012     | table             | sspu
 public | sspudb_r1_p2013     | table             | sspu
 public | sspudb_r1_p2014     | table             | sspu
 public | sspudb_r1_p2015     | table             | sspu
 public | sspudb_r1_p2016     | table             | sspu
 public | sspudb_r1_p2017     | table             | sspu
 public | sspudb_r1_p2018     | table             | sspu
 public | sspudb_r1_p2019     | table             | sspu
 public | sspudb_r1_p2020     | table             | sspu
 public | sspudb_r1_phis      | table             | sspu
(23 rows)

<think>好的,我现在需要解决用户在使用pg_dump时遇到的“invalid option -- o”错误。用户提供的引用中有关于不同工具的使用示例,比如gs_dumppg_dump的不同选项,这可能是一个关键点。首先,我得确认用户使用的命令是否存在拼写错误或选项错误。 用户提到错误是无效的选项“-- o”,看起来像是命令行中的选项格式不正确。通常,PostgreSQLpg_dump使用单短横线加字母选项,如-O,或者双短横线加全名选项,比如--no-owner。如果用户输入的是“-o”或“--o”,这可能是错误的,因为pg_dump没有这个选项。比如,引用[2]中使用的选项是--format=c,而引用[5]中的gs_dump用了-T,这说明不同工具可能有不同的选项。 接下来,我需要检查用户可能输入的命令。例如,用户是否错误地使用了“-o”而不是正确的选项?比如,正确的排除所有者选项是-O(大写O),而用户可能误输入为小写o。或者用户是否混淆了不同工具,比如gs_dump(可能是高斯数据库的导出工具)和pg_dump,两者的选项可能不同。例如,引用[5]中的gs_dump使用了-T,而pg_dump中的相同功能可能是--exclude-table。 另外,引用[3]中的例子使用了-O选项,可能代表“no-owner”,而如果用户在命令中错误地输入了“-o”而不是“-O”,就会导致这个错误。所以需要检查用户命令中的选项是否正确,是否大小写错误或者拼写错误。 解决方案方面,应该指导用户检查选项的正确性,确认使用pg_dump而非其他工具,并参考正确的文档。例如,建议用户使用pg_dump --help查看可用选项,或者参考PostgreSQL官方文档。同时,如果用户原本想使用-O(不保存所有者信息),则需要确保正确的大写字母。如果用户混淆了工具,比如误用了gs_dump的选项到pg_dump中,也需要指出这点。</think>在使用 `pg_dump` 时遇到 `invalid option -- o` 错误,通常是由于命令行选项格式错误或使用了不支持的选项。以下是逐步解决方案: ### 1. **检查选项语法** `pg_dump` 的选项需遵循以下规则: - **短选项**:单短横线 `-` + 单个字母(例如 `-O`)。 - **长选项**:双短横线 `--` + 全名(例如 `--no-owner`)。 **错误示例**: ```bash pg_dump -o database_name # -o 是无效选项 pg_dump --o database_name # --o 是无效选项 ``` **正确用法**: - 若需排除表所有者信息,应使用 `-O`(大写字母 O): ```bash pg_dump -O -Fc -f backup.dump database_name ``` - 若需指定输出格式,使用 `-F` 或 `--format`: ```bash pg_dump -Fc --file=backup.dump database_name ``` ### 2. **确认工具兼容性** 部分数据库工具(如 `gs_dump`)的选项与 `pg_dump` 不同。例如: - `gs_dump` 的 `-T` 用于排除表(引用[^5]),而 `pg_dump` 使用 `--exclude-table`。 - 确保未将其他工具的选项误用于 `pg_dump`。 ### 3. **验证选项是否支持** 通过以下命令查看 `pg_dump` 支持的选项: ```bash pg_dump --help ``` 或参考官方文档[^4]。 ### 4. **常见场景与修正** | 错误意图 | 错误命令示例 | 正确命令示例 | |-------------------------|--------------------|--------------------------------| | 排除所有者信息 | `pg_dump -o ...` | `pg_dump -O ...` | | 指定自定义格式 | `pg_dump --f=c ...`| `pg_dump --format=c ...` | | 导出特定表 | `pg_dump -t table` | `pg_dump --table=table ...` | ### 5. **示例修正** 假设原命令为: ```bash pg_dump -o -f backup.sql mydb ``` 修正后: ```bash pg_dump -O -Fc -f backup.dump mydb # 使用 -O(大写)排除所有者,-Fc 指定自定义格式 ``` ### 引用说明 - `pg_dump` 的二进制格式输出需使用 `-Fc` 或 `--format=custom`(引用[^2])。 - 逻辑备份的原理及工具差异可参考 PostgreSQL 技术内幕文档。 - 避免混淆不同工具的选项,如 `gs_dump` 的 `-T` 与 `pg_dump` 的 `--exclude-table`(引用[^5])。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值