【问题标题】:PosgtreSQL - update column if its value equals to DEFAULT valuePostgreSQL - 如果其值等于 DEFAULT 值,则更新列
【发布时间】:2021-05-17 16:41:57
【问题描述】:

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

在 MySQL 中,我有

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

但它在 PosgtreSQL 中不起作用。

【问题讨论】:

    标签: postgresql sql-update


    【解决方案1】:

    您可以从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'
    )
    

    查看简化的demo

    【讨论】:

      【解决方案2】:

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

      假设列被定义为

      foo timestamp DEFAULT localtimestamp
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-22
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多