PostgreSQL:规则和序列属性

时间:2016-04-30 14:01:37

标签: postgresql rules

这是我的PostgreSQL数据库的基本架构:

create table client(numclient serial not null,
                    age int not null,
                    amountDue decimal(10,2) not null default 0.0,

                primary key (numclient) );

create table payment(   numpayment serial not null,
                        amountPaid decimal(10,2) not null default 0.0,
                        numclient int not null,
                    primary key (numpayment),
                    foreign key (numclient) references client
                        on delete cascade );

create or replace rule on_insert_client as on insert to client
do also insert into payment(numclient) values(new.numclient);

这样可以正常工作,但是当我想通过执行以下操作将元素插入表客户端时:

insert into client(age) values (25);

我收到此错误消息:

错误:在表格上插入或更新"付款"违反外键约束" payment_numclient_fkey"

DETAIL:键(numclient)=(2)不存在于表" client"。

如果我理解得很好,则会出现错误,因为它会在表格客户端中插入行之前尝试在表格付款中插入新行。但是,当我使用它时:

insert into client(numclient, amountDue, age) values (4, 0.0, 25);

工作正常。但是,这是非常严格的限制因为如果我必须自己选择属性的值,则numclient不再是一个串行属性。

所以看起来问题来自于在执行规则后创建值的默认串行属性。有没有办法绕过这个问题?

由于

0 个答案:

没有答案