我正在运行启用负载平衡的 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 将其识别为写入查询,那么我应该将写入分开吗?