如何使用每行上具有不同值的生成UUID更新列值?
UPDATE TABLE
SET id = replace(cast(uuid_in(md5(now()::text)::cstring) as varchar), '-', '');
我已使用该代码但导致id
列上的每一行都具有相同的值。谢谢!
更新
replace(cast(uuid_in(md5(now()::text)::cstring) as varchar), '-', '')
此行返回如下内容:414079b5c096f2defa6a4ce8f1880e2c
假设我有这张表:
ID ColumnA
1 testA
2 testB
3 testC
我想更新ID列上的每个值变为:
ID ColumnA
414079b5c096f2defa6a4ce8f1880e2c testA
414079b5c096f2defa6a4ce8f1881f3d testB
414079b5c096f2defa6a4ce8f1882g4e testC
但我从该查询得到的是,ID列上的每个值都具有相同的值。
答案 0 :(得分: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