自定义 pg:dump 选项与 Heroku pg:backups 捕获



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

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

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

我仍然需要它来保留存档表的备份,但我不想下载它。我可以在需要时执行与备份分开的pg_dump吗?

我知道这是一个很长的机会,但任何建议将不胜感激。

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

您可以做的是运行自己的pg_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:qwertyqwerty@ec2-1-1-1-1.compute-1.amazonaws.com: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:qwertyqwerty@ec2-1-1-1-1.compute-1.amazonaws.com:1111/zzxcasdqwe 
        -n schema -t table -O -x -Fc -f dump.out

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