【问题标题】:Download partial database from heroku从heroku下载部分数据库
【发布时间】:2015-05-25 21:12:18
【问题描述】:

我有一个 ruby​​ on rails 应用程序托管在 heroku 上,使用 postgresql 作为其数据库。由于数据库变得非常大,我想知道是否有一种方法可以只从 heroku 下载其中的特定部分。例如,是否可以只下载一个特定的表,或者只下载 parent_id == x 的行。

【问题讨论】:

    标签: ruby-on-rails database postgresql heroku partial


    【解决方案1】:

    除了史蒂夫非常正确的答案之外,您还可以选择使用psql 连接到DATABASE_URL 并使用\copy,例如

    $ psql "$(heroku config:get DATABASE_URL)"
    
    mydb=> \copy mytable TO 'mytable.csv' WITH (FORMAT CSV, HEADER)
    
    mydb=> \copy (SELECT col1, col2 FROM mytable2 WHERE ...) TO 'mytable2_partial.csv' WITH (FORMAT CSV, HEADER)
    

    您可以提取整个表,或任意查询的输出(包括连接等)。表定义 (DDL) 不会以这种方式导出,但可以使用 pg_dump --schema-only -t ... 转储。

    【讨论】:

    • 有没有办法可以将所有这些放入某种脚本中(我会经常进行这种“选择性备份”)?而且,由于我将获得多个表,有没有办法将它们全部放在某种 .dump 文件(而不是 .csv)中,以便更容易导入?
    • @Robert 当然。如果您想从 shell 调用 psql,任何脚本语言都可以。或者您可以使用 Ruby pg gem 的 copy 支持到 COPY ... TO STDOUT 而不是使用 psql\copy;有关于如何直接从 Ruby 中的Pg gem 中COPY 的现有答案。
    【解决方案2】:

    使用DATABASE_URL 配置设置,您可以使用pg_dump 访问您的数据库并使用-t 开关指定某个表。

    例如,要将表 my_table 导出到名为 db.sql 的文件中:

    pg_dump -t my_table `heroku config:get DATABASE_URL` > db.sql
    

    如果您需要将下载限制在某些行,那么我认为pg_dump 不会自己完成这项工作。您可以在 Heroku 数据库中创建另一个表,以首先定义要下载的行子集,然后让 pg_dump 仅转储该表。有关如何执行此操作的一些想法,请参阅此问题:Export specific rows from a PostgreSQL table as INSERT SQL script

    【讨论】:

    • 所以如果我理解正确的话,我会在 Heroku 数据库中创建特定的导出表,然后用 pg_dump 下载它们吗?有没有办法我可以编写某种脚本来完成这一切?我基本上希望能够在 heroku 上运行一个脚本,创建我需要的各种 export_tables,然后下载它们。
    • @Robert 你可以编写一个脚本在 Heroku 上运行来导出你想要的数据。如果您希望脚本定期运行并将转储上传到 S3,您可以让脚本从 Heroku 调度程序中运行。如果您只想要一个一次性脚本,最好按照 Craig 的建议,使用本地 pg 客户端编写一些在本地运行的内容。
    猜你喜欢
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多