1

我有一张桌子

event_id BIGINT NOT NULL,
data BYTEA

此表中的一列是

 event_id |        data
----------+--------------------
        2 | \x0000000000000000

现在,我想更新一段数据,例如

UPDATE "bin_data" SET "data"=SET_BYTE("data", 0, 1) where "event_id"=2;

但是,我不确定这个选项是否可以同时使用。

如果这两个选项

UPDATE "bin_data" SET "data"=SET_BYTE("data", 0, 1) where "event_id"=2;
UPDATE "bin_data" SET "data"=SET_BYTE("data", 1, 1) where "event_id"=2;

是并行执行的。

在我的测试中,结果是\x0101000000000000,但我不能保证我的测试是绝对并行的。

我知道如何解决它,就像这样锁定行

UPDATE "bin_data" SET "data"=SET_BYTE((SELECT "data" FROM "data" WHERE "event_id"=2 FOR UPDATE), 0, 1) where "event_id"=2;

有没有办法在不锁定行的情况下并行更新一片 bytea 字段?

4

0 回答 0