这是一个奇怪的问题。让我列出我的表格结构......
我的“服务器”表为我提供了服务器的状态信息(我每分钟都会收到一些此类消息)。我的“客户端”表使用客户端信息更新(显然,客户端连接到服务器)。
集群中的一台服务器始终是“主服务器”,可以这么说(其他服务器是辅助服务器)。每个客户端都向我的每个服务器提供延迟信息。
我需要查看客户端延迟大于 60 秒的行,但我还需要知道每个服务器的状态。
这是示例表(服务器,然后是客户端):
server_name | server_role | sstat_time
--------------+-----------------+----------------------
server1 | PRIMARY | 2013-05-15 01:01:00
server2 | SECONDARY | 2013-05-15 01:02:00
server3 | SECONDARY | 2013-05-15 01:02:00
server1 | PRIMARY | 2013-05-15 01:05:00
server2 | SECONDARY | 2013-05-15 01:06:00
server3 | PRIMARY | 2013-05-15 01:10:00
server1 | SECONDARY | 2013-05-15 01:11:00
server1 | PRIMARY | 2013-05-15 01:22:00
server3 | SECONDARY | 2013-05-15 01:23:00
客户:
client_name | server_dest | latency | cstat_time
------------+---------------+-----------+--------------------
client1 | server1 | 2 | 2013-05-15 01:01:30
client2 | server2 | 68 | 2013-05-15 01:01:40
client2 | server1 | 99 | 2013-05-15 01:01:50
client1 | server3 | 5 | 2013-05-15 01:10:00
client2 | server3 | 78 | 2013-05-15 01:10:30
client2 | server1 | 15 | 2013-05-15 01:10:50
所以,我想要的这个查询的结果是:
client_name | server_name | latency | server_role | cstat_time
--------------+---------------+-----------+--------------+--------------------
client2 | server2 | 68 | SECONDARY | 2013-05-15 01:01:04
client2 | server1 | 99 | PRIMARY | 2013-05-15 01:01:50
client2 | server3 | 78 | PRIMARY | 2013-05-15 01:10:30
我需要知道延迟何时超过 60 秒,还需要知道潜在服务器在那个时间点的作用。
任何线索如何做到这一点?
我在 Postgres 8.4 上运行。