无法在自定义类型的列上使用替换功能

时间:2019-04-11 20:49:34

标签: postgresql replace casting

为了实施某些约束,我们的开发人员将自定义类型用于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

1 个答案:

答案 0 :(得分:1)

replace()适用于字符串,而不适用于枚举。您可以使用带有UPDATE子句的WHERE来完成自己想做的事情。

UPDATE table
       SET column = 'NewValue'::custom_type
       WHERE column = 'OldValue'::custom_type;