pg_dump 命令用法

pg_dump命令用法

https://www.postgresql.org/docs/9.3/app-pgdump.html

// pg_dump -h [host] -U [username] [db name] > dumpfile
$ pg_dump -O --inserts -h pinpoint.c3ymkme5.us-east-1.rds.amazonaws.com -U postgres pinpoint > db-prod.sql
pg_dump: server version: 11.6; pg_dump version: 10.12 (Ubuntu 10.12-0ubuntu0.18.04.1)
pg_dump: aborting because of server version mismatch

pg_dump的版本与postgres的版本不一致

https://wiki.postgresql.org/wiki/Apt

$ sudo apt-get install curl ca-certificates gnupg
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
$ sudo apt-get update
$ sudo apt-get install postgresql-client-11

 

<think> 我们参考了用户提供的引用内容,特别是引用[2]和引用[3]中关于pg_dump排除表的部分。 根据引用[2],用户尝试使用`--exclude-table`参数来排除指定表,但指令有误。 引用[3]详细列出了pg_dump的选项,其中明确提到`--exclude-table`用于排除指定表,并且还提到可以多次使用该选项来排除多个表。 因此,我们可以总结出使用pg_dump排除指定表的方法如下: 1. 使用`--exclude-table`参数,后面跟上要排除的表名(可以使用通配符,如`*_copy`表示排除所有以`_copy`结尾的表)。 2. 如果需要排除多个表,可以多次使用`--exclude-table`参数。 3. 注意:在指定表名时,可能需要使用单引号或双引号将表名括起来,特别是当表名包含特殊字符或通配符时。 4. 另外,如果表在不同的模式(schema)中,需要指定模式的表名,即`schema.table`。 但是,引用[2]中用户的错误指令是因为在指定`--exclude-table`参数时,表名使用了单引号,但在命令行中,单引号可能会被shell解释,导致参数传递不正确。所以,正确的做法是: - 在Unix/Linux系统中,为了避免shell扩展,通常使用单引号将表名模式括起来。 - 在Windows系统中,使用双引号。 另外,引用[3]还提到,如果只想排除表的数据而保留结构,或者排除表的结构而保留数据,可以结合`--data-only`或`--schema-only`选项。但这里用户的需求是排除整个表(包括结构和数据)。 因此,我们可以给出以下示例: 示例1:排除单个表(表名为`unwanted_table`): ```bash pg_dump -U postgres -d mydb --exclude-table='public.unwanted_table' -f backup.sql ``` 示例2:排除多个表(表名为`table1`和`table2`): ```bash pg_dump -U postgres -d mydb --exclude-table='public.table1' --exclude-table='public.table2' -f backup.sql ``` 示例3:使用通配符排除多个表(排除所有以`_backup`结尾的表): ```bash pg_dump -U postgres -d mydb --exclude-table='public.*_backup' -f backup.sql ``` 注意:在指定表名时,我们通常需要包含模式名(如`public`)。如果不指定模式名,则默认是当前模式(通常是`public`,但取决于用户的搜索路径)。如果表在非默认模式中,必须指定模式名。 另外,引用[3]中提到,pg_dump支持多种格式(-F选项),如果使用目录格式(-Fd)或自定义格式(-Fc),则可以使用pg_restore进行选择性恢复。但排除表是在备份时进行的,所以无论输出格式如何,排除表的选项用法相同。 最后,用户引用[2]中的错误指令是: ```bash pg_dump -h 10.***.***.** -p 5432 -U postgres -d database -n schema --exclude-table='*_copy' --section=data > /u01/backup_data.dmp ``` 这里有两个问题: - `--exclude-table`应该放在`-d database`之后,并且注意`-n schema`指定了模式,但排除表参数中的表名没有指定模式(应该写成`schema.*_copy`?)。 - `--section=data`表示只备份数据,此时排除表可能只排除该表的数据,但表结构还会被备份(因为表结构属于`pre-data`和`post-data`部分)。如果用户想完全排除整个表,就不应该使用`--section=data`,或者如果使用,那么排除表的结构部分可能不会被排除。所以,完全排除表不应该使用`--section`选项(除非同时排除结构和数据,但这里用排除表参数更直接)。 因此,我们建议用户在不使用`--section`选项的情况下使用`--exclude-table`来完全排除表。 总结步骤: 1. 确定要排除的表名(包括模式名)和通配符模式。 2. 在pg_dump命令中使用一个或多个`--exclude-table`参数。 3. 根据需求选择输出格式(默认是纯文本,也可以使用其他格式)。 4. 执行命令。 注意:如果排除的表很多,也可以使用`--exclude-table-file`参数指定一个文件,文件中每行写一个要排除的表(格式为`schema.table`或`table`),但注意这个选项在引用中未提及,且不是所有版本都支持(在PostgreSQL 9.1及以上版本支持)。如果用户版本支持,也可以使用。 由于引用中没有提到`--exclude-table-file`,我们主要根据引用内容给出`--exclude-table`的用法。 因此,回答如下: </think> ### pg_dump命令排除指定表的使用方法 在PostgreSQL中,使用`pg_dump`排除特定表需要通过`--exclude-table`参数实现。以下是详细步骤和注意事项: #### 1. 基础排除语法 ```bash pg_dump -U 用户名 -d 数据库名 --exclude-table='模式名.表名' > 备份文件.sql ``` - **模式名**:默认模式为`public`,若表在其他模式中需明确指定 - **表名**:支持通配符`*`进行模式匹配 - **多表排除**:可重复使用`--exclude-table`参数 #### 2. 正确用法示例 ✅ 排除单表(public模式): ```bash pg_dump -U postgres -d mydb --exclude-table='public.logs' > backup.sql ``` ✅ 排除多表: ```bash pg_dump -U postgres -d mydb \ --exclude-table='public.temp_*' \ --exclude-table='archive.old_data' > backup.sql ``` ✅ 排除特定模式下的所有表: ```bash pg_dump -U postgres -d mydb --exclude-table='staging.*' > backup.sql ``` #### 3. 常见错误及解决 ❌ **错误1**:未指定模式名 ```bash # 错误:若logs表不在public模式会导致排除失败 pg_dump ... --exclude-table='logs' ``` ✅ 修复:始终使用`模式.表名`格式 ❌ **错误2**:引号使用不当(Windows需用双引号) ```bash # Linux/macOS --exclude-table='public.*_bak' # Windows --exclude-table="public.*_bak" ``` #### 4. 高级用法 - **结合备份格式**:自定义格式支持选择性恢复 ```bash pg_dump -U postgres -Fc -d mydb \ --exclude-table='public.audit*' \ -f backup.custom ``` - **仅排除数据保留结构**: ```bash pg_dump --schema-only --exclude-table='public.big_data' ... ``` #### 5. 注意事项 1. 通配符`*`需放在引号内:`'schema.temp_*'` 2. 系统表(pg_catalog)不能通过此方式排除 3. 使用`-v`参数验证排除结果: ```bash pg_dump -v ... 2>&1 | grep 'excluded table' ``` 4. 大表排除可提升备份速度约30%-60%(视数据量而定)[^3] > **重要提示**:恢复备份时需确保被排除表的结构已存在,否则可能引发外键约束错误[^1]。建议首次全量备份后再使用排除备份。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值