这是我的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不再是一个串行属性。
所以看起来问题来自于在执行规则后创建值的默认串行属性。有没有办法绕过这个问题?
由于