クラスター内の両方のサーバーに読み取り専用クエリを送信するように、ロード バランシングを有効にして 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 にこれを書き込みクエリとして認識させるための提案はありますか?書き込みを分離する必要がありますか?