防止 postgres 内联更新子查询

Prevent postgres from inlining an update subquery

我有一个table

CREATE TABLE author (
    id SERIAL PRIMARY KEY,
    followers INTEGER[]
);
INSERT INTO author (followers)
       SELECT '{}'::INTEGER[]
       FROM generate_series(0, 1000);

我用 ID 填充它并想添加随机关注者。当我 运行

时出现问题
UPDATE author
SET followers = (SELECT array_agg(id)
                 FROM author
                 WHERE random() < 0.01);

Postgres 很聪明,只执行一次 SELECT,导致相同的值一遍又一遍地重复。实现这一目标的正确方法是什么?我尝试使用 OFFSET 0UDPATE .. FROM .. 但无济于事

我认为您需要在子查询和外部查询之间创建一个人为的依赖关系。像这样简单的东西:

UPDATE Author AS A1
SET
    followers = (
             SELECT array_agg(id)
             FROM Author
             WHERE
                 A1.author_id = A1.author_id AND
                 random() < 0.01);

(我猜列名是 author_id,但任何列都应该有效)