これは奇妙な質問です。テーブル構造をレイアウトさせてください...
「サーバー」テーブルには、サーバーのステータス情報が表示されます (これらのメッセージを毎分いくつか受け取ります)。私の「クライアント」テーブルは、クライアント情報(明らかにサーバーに接続されたクライアント)で更新されます。
クラスタ内の 1 つのサーバーは、いわば常に「プライマリ」です (他のサーバーはセカンダリです)。各クライアントは、各サーバーにレイテンシー情報を提供します。
クライアントの待ち時間が 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で実行しています。