gpt4 book ai didi

sql - 在 Postgres 中有条件地将一列设置为其默认值

转载 作者:行者123 更新时间:2023-11-29 11:25:19 25 4
gpt4 key购买 nike

我有一个 PostgreSQL 8.4 表,它有一个自动递增但可为空的整数列。我想更新一些列值,如果此列为 NULL,则将其设置为默认值(这是一个从序列自动生成的整数),但是我想返回它的值无论哪种情况。所以我想要这样的东西:

UPDATE mytable
SET incident_id = COALESCE(incident_id, DEFAULT), other = 'somethingelse'
WHERE ...
RETURNING incident_id

不幸的是,这不起作用 - DEFAULT 似乎很特殊,不能成为表达式的一部分。执行此操作的最佳方法是什么?

最佳答案

使用这个:

update mytable set a = 
coalesce(incidentid,
(
select column_default::int
from information_schema.columns
where table_schema = 'public'
and table_name = 'mytable' and column_name = 'incidentid')
)

如果您的 incidentid 是整数类型,请对 column_default 进行类型转换

[编辑]

create or replace function get_default_value(_table_name text,_column_name text) 
returns text
as
$$
declare r record;
s text;
begin

s = 'SELECT ' || coalesce(

(select column_default
from information_schema.columns
where table_schema = 'public'
and table_name = _table_name and column_name = _column_name)

, 'NULL') || ' as v';

EXECUTE s into r;
return r.v;
end;
$$
language 'plpgsql';

使用:

update mytable set a = 
coalesce(incidentid, get_default_value('mytable','a')::int )

关于sql - 在 Postgres 中有条件地将一列设置为其默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2672571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com