postgresql - 带参数的列 postgres 函数的默认值

标签 postgresql triggers

我有一个接受一个参数的 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

我对所有 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/

相关文章:

java - 触发 Hibernate 和 Java App

MySQL 在插入前触发时更改类型

SQL存储过程和触发器的区别

maven - 我可以使用 Maven 依赖项触发 Jenkins 作业吗?

java - Hibernate (PostgreSQL) 与 jdbc 相比,外键上的慢速选择查询 WHERE 子句

sql - 列表理解与 PostgreSQL 数组

node.js - Node express & pg-promise - db.any 不是函数

mysql - 使用 MySQL 记录所有表上的所有事件

python - ProgrammingError : relation "django_session" does not exist

sql - PostgreSQL 的时间戳差异(以小时为单位)