首页 > 解决方案 > 如何提取 bzipped PostgreSQL 转储的一部分

问题描述

我有一个 PostgreSQL 纯格式转储,只需要两三个表的数据。转储为 gz2 格式。

bzcat dump.sql.gz | perl -lne 'print if /^COPY tablename/../^\\\.$/' > something.sql

不工作。也试过

bzip2 -dc dump.sql.gz|perl -lne 'print if /^COPY tablename/../^\\\.$/' > something.sql

转储文件超过 30GB。

标签: postgresqlpsqlbz2

解决方案


表名可能需要是模式限定的。

whatever_cat | perl -lne 'print if /^COPY public\.tablename/../^\\\.$/'

这将取决于使用的 pg_dump 版本。该更改实际上是在错误修复版本中开始的,是否是出于安全考虑 (CVE-2018-1058)


推荐阅读