如何通过dblink将选择从一个数据库传递到另一个数据库?

时间:2014-12-30 08:53:23

标签: sql postgresql

我正在使用PostgreSQL 8.4。我有两个数据库,称为db1db2。在db1数据库中,我有表tbl1,其中包含以下列(所有日期都为timestamp without timezone格式):

    date_from               date_to
-------------------    -------------------
2014-05-27 00:00:00    2014-05-27 23:59:59
2014-10-30 00:00:00    2014-10-30 23:59:59
2013-10-19 00:00:00    2013-10-19 23:59:59
2013-07-10 00:00:00    2013-07-10 23:59:59
2013-06-24 00:00:00    2013-06-24 23:59:59
2012-07-14 00:00:00    2012-07-14 23:59:59
2012-05-13 00:00:00    2012-05-13 23:59:59
2013-01-04 00:00:00    2013-01-04 23:59:59
2013-03-26 00:00:00    2013-03-26 23:59:59
...................    ...................

db2数据库中,我有player表,其中包含registration_dateidPK列,如下所示:

 id      registration_date
----    -------------------
 1      2012-06-27 12:03:20
 2      2012-05-13 04:46:18
 3      2013-01-04 21:31:10
 4      2013-03-26 10:17:02
...     ...................

我需要获得包含以下内容的选择

    date_from               date_to              player_count
-------------------    -------------------    ------------------- 
2014-05-27 00:00:00    2014-05-27 23:59:59           ...
2014-10-30 00:00:00    2014-10-30 23:59:59
2013-10-19 00:00:00    2013-10-19 23:59:59
2013-07-10 00:00:00    2013-07-10 23:59:59
2013-06-24 00:00:00    2013-06-24 23:59:59
2012-07-14 00:00:00    2012-07-14 23:59:59
2012-05-13 00:00:00    2012-05-13 23:59:59
2013-01-04 00:00:00    2013-01-04 23:59:59
2013-03-26 00:00:00    2013-03-26 23:59:59
...................    ...................

其中player_count是从date_fromdate_to的时间间隔内注册的玩家数量,date_fromdate_to均来自db1.tbl1 1}}。

当然,当我连接到dblink时,我可以使用db2查询从db1获取数据,但是如何将查询结果传递给dblink {1}} - 查询? SELECT * FROM dblink(conn_str, query) AS ...;其中query只是一个字符串,并且它不知道任何查询结果。

1 个答案:

答案 0 :(得分:1)

如果你真的需要两个表{​​{1}}:

join

但在您的示例中,select date_from, date_to, count(*) from dblink(conn_str, $$ select registration_date from player $$) p (registration_date) inner join t on p.registration_date between t.date_from and t.date_to group by date_from, date_to 表就足够了:

player