PosgtreSQL-如果列的值等于DEFAULT值,则更新列



我有一个PostgreSQL表,其中包含插入查询中未指定的列的默认值。如果列的当前值等于DEFAULT,我如何运行查询来更新列值?

在MySQL中,我有

UPDATE t SET foo = 'foo' WHERE foo = DEFAULT(foo);

但它在PosgtreSQL中不起作用。

您可以从information_schema.columnscolumn_default列中获取列的默认值

对于定义为VARCHARCHAR的列,此值将分别返回为'somevalue'::character varying'somevalue'::bpchar,因此必须取::之前的部分并修剪单引号:

UPDATE t
SET foo = 'new value'
WHERE foo = (
SELECT TRIM('''' FROM SPLIT_PART(column_default, '::', 1))
FROM information_schema.columns 
WHERE table_name = 't' AND column_name = 'foo'
)

查看简化的演示

在PostgreSQL中没有办法做到这一点,我无法想象这样的功能是如何工作的。

假设该列被定义为

foo timestamp DEFAULT localtimestamp

如何判断插入的时间戳是否为默认值?

相关内容

最新更新