1

クラスター内の両方のサーバーに読み取り専用クエリを送信するように、ロード バランシングを有効にして pgpool-II を実行しています。

ただし、UPDATE コマンドを含む CTE クエリがあり、基になるクエリが SELECT であるため、pgpool はそれをスレーブに送信し、読み取り専用の性質のために失敗する場合があります。

たとえば、次のクエリは、一致するものを検索して表示し、それらを同時に表示したものとしてマークします。

WITH matches AS (
    WITH user_liked AS (
          SELECT liked_user_id FROM likes WHERE user_id='x' AND active IS TRUE
    )
    SELECT user_id, liked_user_id, liked_user_viewed, created_ts, matched_ts AS pointer
          FROM likes 
          WHERE 
          user_id IN(SELECT * FROM user_liked) 
          AND 
          active IS TRUE
          AND 
          liked_user_id='x' 
          ORDER BY matched_ts DESC
     ),
     update_liked_user_viewed AS (
          UPDATE likes
          SET liked_user_viewed=TRUE
          WHERE liked_user_id='x' AND user_id IN(SELECT user_id FROM matches)
     )
     SELECT * FROM matches

pgpool にこれを書き込みクエリとして認識させるための提案はありますか?書き込みを分離する必要がありますか?

4

1 に答える 1