De los documentos http://www.postgresql.org/docs/8.4/ estático/reglas.html
por lo que primero reescribe las consultas sin ejecutar nada.
puede hacer que funcione cuando no inserta varios registros a la vez:
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');
);
Entonces puedes hacer:
insert into Children1 (attribute1, attribute2) values ('a1', 'a2');
insert into Children1 (attribute1, attribute2) values ('b1', 'b2');
pero no
insert into Children1 (attribute1, attribute2)
values ('a1', 'a2'),
('b1', 'b2');
Así que realmente no deberías usar el sistema de reglas con llamadas complicadas a currval().
Además, eche un vistazo a los comentarios en estas páginas:
- http://www.postgresql.org/docs/ 8.2/interactivo/reglas-actualización.html
- http://archives.postgresql.org/pgsql- sql/2004-10/msg00195.php
- http://archives.postgresql.org/pgsql- general/2009-06/msg00278.php
Otro consejo:¡el soporte en la lista de correo de postgresql es tan excelente como el propio motor de la base de datos!
Y por cierto:¿sabe que postgresql tiene soporte para herencia listo para usar?
Resumen:¡debe usar activadores o evitar inserciones de varias filas!