列的默认值Postgres函数带有参数

12

我有一个接受一个参数的Postgres函数。我想将此函数设置为列的默认值,但是我不确定如何将参数传递到表定义中。

我的意思是,我的表中有两个列看起来像这样:

trade_id INTEGER NOT NULL
group_id INTEGER DEFAULT trade_id_f(argument_goes_here);

我希望将group_idDEFAULT值设为执行trade_id_f(trade_id)后返回的值,其中trade_id是要插入记录的trade_id

我对postgresql函数一窍不通,这是否可行?

1个回答

17

很抱歉,由于(参见文档),你无法执行此操作:

该值是任何不包含变量的表达式(不允许使用子查询和对当前表中其他列的交叉引用)。

您可以使用触发器,例如:

create table the_table (
    trade_id int not null,
    group_id int);

create or replace function trade_id_trigger ()
returns trigger language plpgsql as $$
begin
    new.group_id:= new.trade_id+ 1;
    return new;
end $$;

create trigger trade_id_trigger
before insert or update on the_table
for each row execute procedure trade_id_trigger();

insert into the_table values (1,1);

select * from the_table;

 trade_id | group_id
----------+----------
        1 |        2
(1 row)

如果一个自定义函数既没有引用任何表,也不需要任何参数,那么是否仍然可以将其作为默认表达式来使用呢? - Alexis.Rolland
1
@Alexis.Rolland - 你可以使用一个没有或者带有常量参数的自定义函数作为默认表达式。 - klin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接