1

これは奇妙な質問です。テーブル構造をレイアウトさせてください...

「サーバー」テーブルには、サーバーのステータス情報が表示されます (これらのメッセージを毎分いくつか受け取ります)。私の「クライアント」テーブルは、クライアント情報(明らかにサーバーに接続されたクライアント)で更新されます。

クラスタ内の 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で実行しています。

4

4 に答える 4