列postgres函数的默认值带参数

Ada*_*dam 7 postgresql

我有一个postgres函数,它接受一个参数.我想使这个函数成为列的默认值,但我不知道如何将参数传递给表定义.

这就是我的意思,我在表中有两列如下所示:

trade_id INTEGER NOT NULL
group_id INTEGER DEFAULT trade_id_f(argument_goes_here);
Run Code Online (Sandbox Code Playgroud)

我想使DEFAULT价值group_id是的返回值trade_id_f(trade_id),其中trade_idtrade_id记录的插入.

我是postgres函数的新手,这可能吗?

kli*_*lin 11

不幸的是,你不能这样做,因为(对于文档):

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

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

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)
Run Code Online (Sandbox Code Playgroud)