pg_dump的一些小技巧

今天在微信群里看到有人在问,pg_dump能不能像Oracle一样从列表中读取指定的表名然后导出呢?

尽管pg_dump支持导出的-t选项进行模糊匹配,也支持-T来排序不需要导出的表。但实际应用中我们往往经常会碰到需要碰到比方说用户给了一个表清单,说要把这些表都导出来,这种时候如果一张张去匹配,不仅工作量大,而且pg_dump的命令也会很长。

技巧一:根据文件导出指定表

这里给出一个简单的脚本参考下,用来满足这种需求:

pg_dump -d database_name $(cat table_list.txt | xargs -I % echo "-t %") > file_name.sql

上面的脚本中我们将需要导出的表名写入table_list.txt文件中即可。

技巧二:根据query导出指定数据

除此之外,还有个经常碰到问题。pg_dump有没有类似Oracle中expdp的query选项呢,即根据查询结果导出某张表数据。

pg_dump是不支持该功能的,比较常见的做法是根据查询创建张临时表然后进行导出。初次之外我们也可以利用copy命令支持过滤的功能来间接实现:使用 pg_dump 命令来生成表的 DDL,然后使用 psql 命令和 COPY 命令将数据导出到文件中。

1、pg_dump导出表结构:

pg_dump -U username -s -t tablename dbname > schema.sql

2、copy导出数据

psql -U username -d dbname -c "COPY (SELECT * FROM tablename WHERE columnname = 'value') TO STDOUT" > data.sql
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值