有没有办法做一个SELECT ... FOR UPDATE
,但有一个嵌套更新返回而不是选择?我想的场景看起来有点像:
UPDATE cars
SET model='myModel', ownerID=(
UPDATE owners
SET cars_owned = cars_owned + 1
WHERE name = 'fred'
RETURNING id
)
WHERE id = 'abc123';
没有交易,有没有办法原子地做到这一点?
有点。您可以使用CTE:
WITH o as (
UPDATE owners
SET cars_owned = cars_owned + 1
WHERE name = 'fred'
RETURNING id
)
UPDATE cars
SET model = 'myModel',
ownerID = (SELECT id FROM o);
WHERE id = 'abc123';