对于未在insert查询中指定的列,我有一个具有默认值的PostgreSQL表。如果列的当前值等于默认值,如何运行查询更新列值?
在MySQL,我有
UPDATE t SET foo = 'foo' WHERE foo = DEFAULT(foo);但它并不适用于PosgtreSQL。
发布于 2021-05-17 17:23:45
可以从column_default列获得information_schema.columns列的默认值。
对于定义为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'
)请参阅简化的演示。
发布于 2021-05-17 17:10:00
在PostgreSQL中没有办法做到这一点,我无法想象这样的特性是如何工作的。
假设列被定义为
foo timestamp DEFAULT localtimestamp如何判断插入的时间戳是否为默认值?
https://stackoverflow.com/questions/67573832
复制相似问题