Изпълнявам pgpool-II с активирано балансиране на натоварването, така че изпраща заявки само за четене до двата сървъра в моя клъстер.
Има обаче някои случаи, в които имам CTE заявки, които съдържат команди UPDATE, но основната заявка е 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 да разпознае това като заявка за запис, така че трябва ли да отделя записа?