Postgres有没有相当于'mysqldump --where'?

时间:2016-07-11 13:46:01

标签: ruby-on-rails postgresql heroku

我正在开发一个使用多租户gem Milia的Rails项目。 Milia使用基于行的租户,这意味着数据库中的每一行都有一个名为tenant_id的列,用于确定此数据属于谁。我们使用Heroku和Postgresql。

整个数据库非常庞大,虽然有时我想要完整的生产转储,但更多时候我宁愿只为一个租户提供数据。

那么我想转储整个数据库,但只转储行where tenant_id=xmysqldump有一个where条件,但我找不到Postgresql的等价物。

例如,如果我的数据库是这样的:

Table Members  
tenant_id, id, name, sex  
1, 1, joe, m  
1, 2, sally, f  
2, 3, bob, m  

Table Jobs  
tenant_id, id
1, 1
1, 2
2, 3

我希望转储tenant_id1的所有表,我希望得到一个包含以下内容的转储:

Table Members  
tenant_id, id, name, sex  
1, 1, joe, m  
1, 2, sally, f  

Table Jobs  
tenant_id, id
1, 1
1, 2

1 个答案:

答案 0 :(得分:0)

我不确定这是否是最佳做法,但您可以:

  1. 使用您想要的行
  2. 创建表格的view

    CREATE VIEW tweets AS SELECT * FROM contents WHERE provider = 'twitter';

    1. 从视图中创建一个新表
    2. CREATE TABLE tweets_table AS SELECT * FROM tweets;

      1. 在另一个标签中,转储新表
      2. pg_dump -t tweets_table brainstream_development

        1. 删除中间表
        2. 另一种选择是创建视图并从中复制psql(psql可以导入它):

          CREATE VIEW tweets AS SELECT * FROM contents WHERE provider = 'twitter';

          psql -d brainstream_development -A -t -c "select * from tweets" > tweets.dump