我有一个PostgreSQL表,其中包含插入查询中未指定的列的默认值。如果列的当前值等于DEFAULT,我如何运行查询来更新列值?
在MySQL中,我有
UPDATE t SET foo = 'foo' WHERE foo = DEFAULT(foo);
但它在PosgtreSQL中不起作用。
您可以从information_schema.columns
的column_default
列中获取列的默认值
对于定义为VARCHAR
或CHAR
的列,此值将分别返回为'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
如何判断插入的时间戳是否为默认值?