使用 Heroku pg:backups capture 自定义 pg:dump 选项?

问题描述 投票:0回答:2

开发时,我需要提取最新的数据库,以便我知道我正在使用最新的数据。但是,我们保留了一张装满档案的桌子,我不需要费心下载,因为它是一张非常大的桌子。

我知道 pg_dump 允许自定义参数,让您排除某个表被转储。

如果不做任何疯狂的事情,比如拥有 2 个数据库,1 个用于数据,1 个用于档案,有没有办法从 Heroku 下载除了档案表之外的所有内容?

我仍然需要它来保存档案表的备份,但我不想下载它。我可以在需要时独立于备份进行 pg_dump 吗?

我知道这希望渺茫,但任何建议将不胜感激。

postgresql heroku backup pg
2个回答
5
投票

使用

heroku pg:backups capture
时无法添加任何自定义 pg_dump 选项。该命令实际上调用了一个未记录的 Heroku Postgres API,并且它不传递任何参数(如果您好奇,请参阅此处的代码)。

您可以做的是运行您自己的 pg_dump dump 命令,该命令指向 Heroku Postgres 实例。

使用 pg:credentials 获取连接信息,如果您有多个数据库附加到应用程序,其中 DATABASE_URL 也可以是数据库颜色:

> heroku pg:credentials DATABASE_URL --app app_name
Connection info string:
   "dbname=zzxcasdqwe host=ec2-1-1-1-1.compute-1.amazonaws.com port=1111 user=asdfasdf password=qwertyqwerty sslmode=require"
Connection URL:
   postgres://asdfasdf:[email protected]:1111/zzxcasdqwe

获取连接信息字符串或连接 url,并将其作为 pg_dump 的第一个参数并添加您的自定义选项

pg_dump "dbname=zzxcasdqwe host=ec2-1-1-1-1.compute-1.amazonaws.com port=1111 user=asdfasdf password=qwertyqwerty sslmode=require"\
        -n schema -t table -O -x -Fc -f dump.out
# OR
pg_dump postgres://asdfasdf:[email protected]:1111/zzxcasdqwe \
        -n schema -t table -O -x -Fc -f dump.out

我还与他人共同编写了一个 Heroku 插件 (parse_db_url),它将把 DATABASE_URL 解析为其他格式,如 pg_dump、pg_restore、pgpass 等。我发现它在处理几个不同的 Heroku 数据库时很有用。


0
投票

有时,您想要导出表及其结构,但省略表数据。当从生产系统转储数据库以设置一些暂存或本地开发环境而无需大量数据时,这会派上用场。

pg_dump
提供了另一个排除表格数据的参数,即
--exclude-table-data

--排除表数据=模式 不要转储任何匹配模式的表的数据。该模式根据与 -t 相同的规则进行解释。 --exclude-table-data 可以多次给出以排除与任何以下项匹配的表 几种模式。当您需要定义特定表(即使不需要其中的数据)时,此选项非常有用。

但是,如果您想转储完全不包含任何数据的数据库,请使用选项

schema-only
仅获取表和视图定义。

© www.soinside.com 2019 - 2024. All rights reserved.