防止 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 0
和 UDPATE .. 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
,但任何列都应该有效)
我有一个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 0
和 UDPATE .. 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
,但任何列都应该有效)