如何在Postgres中向uuid列插入值?

4
我有一张带有uuid列的表格,其中一些行缺少数据。我需要向这个uuid列插入数据。这些数据是手动输入的,因此我们会加上其他列的后缀以区分,但这会导致错误。
UPDATE schema.table 
    SET uuid_column = CONCAT ('f7949f56-8840-5afa-8c6d-3b0f6e7f93e9', '-', id_column) 
WHERE id_column = '1234';

错误:[42804] 错误:列 "uuid_column" 的类型为 uuid,但表达式的类型为文本
提示:您需要重写或转换表达式。
位置:45

我还尝试了

UPDATE schema.table 
   SET uuid_column = CONCAT ('f7949f56-8840-5afa-8c6d-3b0f6e7f93e9', '-', id_column)::uuid 
WHERE id_column = '1234';

错误:[22P02] 错误:UUID的输入语法无效:"f7949f56-8840-5afa-8c6d-3b0f6e7f93e9-1234"

该错误提示表示输入的UUID格式不正确,最后的“-1234”是无效的。请检查输入的UUID是否符合标准格式。

很抱歉,您无法在此处执行您试图执行的操作。 f7949f56-8840-5afa-8c6d-3b0f6e7f93e9 已经是完整且有效的UUID,您不能追加任何值。你究竟想通过这样做解决什么问题?如果您想生成UUID,请安装 uuid-ossp扩展,并使用例如uuid_generate_v4()函数。 - user330315
3
可以添加一个布尔型列来指示 _uuid_column_ 是否是手动添加的。另一种选择是将列类型从 uuid 更改为 varchar,但这会使其他地方变得更加困难。 - pirho
好的,看起来我们在插入uuid列时不能添加任何后缀或前缀。这个说法正确吗?我不喜欢将其转换为varchar的选项,那样会很混乱。 - knightrider
你不能这样做。因为你不能将“文本”插入到“bigint”列中。这不再是符合rfc4122规范的“uuid”。 - pirho
我认为pirho的建议是正确的,应该添加一个标志来指示是否为手动ID。 - user330315
显示剩余4条评论
1个回答

2

UUID由16个字节组成,以十六进制表示。

不能使用少于或多于16个字节的UUID。

如果您真的需要这样做,我建议使用类型bytea

“原始回答”翻译成中文为“最初的回答”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接