我有一个接受一个参数的 postgres 函数。我想让这个函数成为列的默认值,但我不确定如何将参数传递到表定义中。
这就是我的意思,我在表中有两列,如下所示:
trade_id INTEGER NOT NULL
group_id INTEGER DEFAULT trade_id_f(argument_goes_here);
我想让 group_id
的 DEFAULT
值成为 trade_id_f(trade_id)
的返回值,其中 trade_id
是要插入的记录的 trade_id
。
我对所有 postgres 函数都不熟悉,这可能吗?
最佳答案
不幸的是,你不能这样做,因为(对于 the documentation ):
The value is any variable-free expression (subqueries and cross-references to other columns in the current table are not allowed).
您可以使用触发器,例如:
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)
关于postgresql - 带参数的列 postgres 函数的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32183363/