首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PosgtreSQL -如果其值等于默认值,则更新列

问PosgtreSQL -如果其值等于默认值,则更新列
EN

Stack Overflow用户
提问于 2021-05-17 16:41:57
回答 2查看 124关注 0票数 1

对于未在insert查询中指定的列,我有一个具有默认值的PostgreSQL表。如果列的当前值等于默认值,如何运行查询更新列值?

在MySQL,我有

代码语言:javascript
复制
UPDATE t SET foo = 'foo' WHERE foo = DEFAULT(foo);

但它并不适用于PosgtreSQL。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-17 17:23:45

可以从column_default列获得information_schema.columns列的默认值。

对于定义为VARCHAR或CHAR的列,此值分别以'somevalue'::character varying或'somevalue'::bpchar的形式返回,因此必须在::之前选择该部分并修剪单引号:

代码语言:javascript
复制
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'
)

请参阅简化的演示。

票数 1
EN

Stack Overflow用户

发布于 2021-05-17 17:10:00

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

假设列被定义为

代码语言:javascript
复制
foo timestamp DEFAULT localtimestamp

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67573832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档