Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL中的更新生成相同的UUID_Sql_Postgresql_Sql Update_Uuid - Fatal编程技术网

PostgreSQL中的更新生成相同的UUID

PostgreSQL中的更新生成相同的UUID,sql,postgresql,sql-update,uuid,Sql,Postgresql,Sql Update,Uuid,我为我的一个表添加了新的uuid列,并安装了uuid-ossp扩展。 现在我想更新所有现有记录,并为这个新的uuid列设置值 我不想对ADD COLUMN使用默认回退,而是想在UPDATE语句中使用它,所以我有如下内容: UPDATE table_name SET uuid = (SELECT uuid_generate_v4()); 但我遇到的问题是,为所有记录生成相同的UUID 是否有一种方法可以传递种子值或生成函数的内容,或者有另一种方法强制生成的UUID是唯一的?您可以尝试修改UUID

我为我的一个表添加了新的
uuid
列,并安装了
uuid-ossp
扩展。 现在我想更新所有现有记录,并为这个新的
uuid
列设置值

我不想对ADD COLUMN使用默认回退,而是想在UPDATE语句中使用它,所以我有如下内容:

UPDATE table_name SET uuid = (SELECT uuid_generate_v4());
但我遇到的问题是,为所有记录生成相同的UUID


是否有一种方法可以传递种子值或生成函数的内容,或者有另一种方法强制生成的UUID是唯一的?

您可以尝试修改UUID子查询,以便它强制/诱使Postgres为每个记录生成新的UUID:

更新表\u名称
设置uuid=uuid\u生成\u v4()
其中uuid不为NULL;

WHERE
子句只是一个伪子句,但可能会导致Postgres为每个记录调用一次UUID函数。

您可以尝试修改UUID子查询,以便它强制/欺骗Postgres为每个记录生成新的UUID:

更新表\u名称
设置uuid=uuid\u生成\u v4()
其中uuid不为NULL;

WHERE
子句只是一个伪子句,但可能会导致Postgres为每个记录调用一次UUID函数。

如果在子查询中调用
UUID\u generate\u v4()
函数,PostgreSQL将假定子查询只需调用一次,因为它不包含对周围查询的任何引用。因此,所有行都将更新为相同的
uuid
,但失败


如果删除子查询并只保留函数调用,则会为每一行调用该函数,因为它是易变的,如果在子查询中调用
uuid\u generate\u v4()
函数,PostgreSQL将假定该子查询只需调用一次,因为它不包含对周围查询的任何引用。因此,所有行都将更新为相同的
uuid
,但失败


如果删除子查询并只保留函数调用,则会为每一行调用该函数,因为它是
VOLATILE

谢谢。事实证明,我所要做的就是从子查询中删除“SELECT”。我猜它做了一些缓存之类的事情?@whatamidong with mylife Correct。Postgres认为它可以帮助您实现只执行一次不相关的子查询,然后缓存和重用结果。除了在你的情况下,你实际上不想那样做。谢谢。事实证明,我所要做的就是从子查询中删除“SELECT”。我猜它做了一些缓存之类的事情?@whatamidong with mylife Correct。Postgres认为它可以帮助您实现只执行一次不相关的子查询,然后缓存和重用结果。除了在你的情况下,你实际上不想要那种行为。