使用生成的UUID更新列

mrj*_*_05 1 sql postgresql

如何使用每行上具有不同值的生成UUID更新列值?

UPDATE TABLE 
    SET id = replace(cast(uuid_in(md5(now()::text)::cstring) as varchar), '-', '');
Run Code Online (Sandbox Code Playgroud)

我已经使用了该代码,但导致列上的每一行都id具有相同的值.谢谢!

UPDATE

replace(cast(uuid_in(md5(now()::text)::cstring) as varchar), '-', '')
Run Code Online (Sandbox Code Playgroud)

此行返回如下内容:414079b5c096f2defa6a4ce8f1880e2c

假设我有这个表:

ID ColumnA
1  testA
2  testB
3  testC
Run Code Online (Sandbox Code Playgroud)

我想更新ID列上的每个值变得像:

ID                                ColumnA
414079b5c096f2defa6a4ce8f1880e2c  testA
414079b5c096f2defa6a4ce8f1881f3d  testB
414079b5c096f2defa6a4ce8f1882g4e  testC
Run Code Online (Sandbox Code Playgroud)

但是我从该查询得到的是,ID列上的每个值都具有相同的值.

a_h*_*ame 6

now()返回事务开始时的时间.

你想用 clock_timestamp()

从手册中引用:

clock_timestamp() 返回实际的当前时间,因此即使在单个SQL命令中,其值也会更改

手册中的更多细节:http:
//www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT


顺便说一下:Postgres已经内置了UUID生成功能.您可能也希望看一下:http://www.postgresql.org/docs/current/static/uuid-ossp.html