Từ tài liệu http://www.postgresql.org/docs/8.4/ static / rules.html
vì vậy, trước tiên nó sẽ viết lại các truy vấn mà không thực hiện bất cứ điều gì.
bạn có thể làm cho nó hoạt động khi bạn không chèn nhiều bản ghi cùng một lúc:
create or replace rule ct_i_children1 as
on insert to Children1
do instead (
insert into Parents(id, attribute1, type)
values(nextval('parents_id_seq'), new.attribute1, 'Child1');
insert into Partial_Children1(id, attribute2, type)
values(currval('parents_id_seq'), new.attribute2, 'Child1');
);
Sau đó, bạn có thể làm:
insert into Children1 (attribute1, attribute2) values ('a1', 'a2');
insert into Children1 (attribute1, attribute2) values ('b1', 'b2');
nhưng không
insert into Children1 (attribute1, attribute2)
values ('a1', 'a2'),
('b1', 'b2');
Vì vậy, bạn thực sự không nên sử dụng hệ thống quy tắc với các lệnh gọi currval () phức tạp.
Ngoài ra, hãy xem các nhận xét trên các trang này:
- http://www.postgresql.org/docs/ 8.2 / tương tác / quy tắc-update.html
- http://archives.postgresql.org/pgsql- sql / 2004-10 / msg00195.php
- http://archives.postgresql.org/pgsql- chung / 2009-06 / msg00278.php
Một mẹo khác:hỗ trợ tại danh sách gửi thư postgresql cũng tuyệt vời như chính công cụ cơ sở dữ liệu!
Nhân tiện:bạn có biết rằng postgresql có hỗ trợ tính năng kế thừa không?
Tóm tắt:bạn nên sử dụng trình kích hoạt hoặc tránh chèn nhiều hàng!