我已经为我的一个表添加了新的uuid
列并安装了uuid-ossp
扩展。现在我想更新所有现有的记录,并为这个新的uuid
列设置值。
我不想为ADD COLUMN使用DEFAULT回退,而是我想在UPDATE语句中这样做,所以我有这样的东西:
UPDATE table_name SET uuid = (SELECT uuid_generate_v4());
,但我的问题是,相同的UUID是为所有记录生成的。
是否有一种方法来传递种子值或生成函数或另一种方法来强制生成的uuid是唯一的?
您可以尝试修改UUID子查询,以便它强制/欺骗Postgres为每条记录生成一个新的UUID:
UPDATE table_name
SET uuid = uuid_generate_v4()
WHERE uuid IS NOT NULL;
WHERE
子句只是一个虚拟的,但是可能会导致Postgres为每条记录调用一次UUID函数。
如果你在子查询中调用uuid_generate_v4()
函数,PostgreSQL会假设子查询只需要调用一次,因为它不包含任何对周围查询的引用。因此,所有的行将被更新为相同的uuid
,这将失败。
如果您删除子查询并只留下函数调用,则会对每一行调用该函数,因为它是VOLATILE
。