为了实施某些约束,我们的开发人员将自定义类型用于type / factor列。
如此定义的自定义类型,包括旧值和新值:
create type custom_type as enum ('Value1', 'Value2', 'Value3', 'OldValue', 'NewValue');
我试图像这样更新表中的一些值:
UPDATE table SET column = replace(column, 'OldValue'::custom_type, 'NewValue'::custom_type);
但是收到以下错误:
[2019-04-11 16:37:42] [42883] ERROR: function replace(column, custom_type, custom_type) does not exist
[2019-04-11 16:37:42] Hint: No function matches the given name and argument types. You might need to add explicit type casts.
我猜想这将需要定义一个自定义的“替换”函数来处理类型,或者有一种方法可以通过强制转换来处理它。
作为参考,这是PostgreSQL 11.2
答案 0 :(得分:1)
replace()
适用于字符串,而不适用于枚举。您可以使用带有UPDATE
子句的WHERE
来完成自己想做的事情。
UPDATE table
SET column = 'NewValue'::custom_type
WHERE column = 'OldValue'::custom_type;