PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Regole di PostgreSQL e nextval()/problema seriale (molto specifico per PostgreSQL)

Dai documentihttp://www.postgresql.org/docs/8.4/ statico/regole.html

quindi prima riscrive le query senza eseguire nulla.

puoi farlo funzionare quando non inserisci più record contemporaneamente:

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');
  );

Allora puoi fare:

insert into Children1 (attribute1, attribute2) values ('a1', 'a2');
insert into Children1 (attribute1, attribute2) values ('b1', 'b2');

ma non

insert into Children1 (attribute1, attribute2)
  values ('a1', 'a2'),
         ('b1', 'b2');

Quindi non dovresti davvero usare il sistema di regole con chiamate currval() complicate.

Dai anche un'occhiata ai commenti su queste pagine:

Un altro consiglio:il supporto alla mailing list postgresql è eccellente quanto il motore di database stesso!

E comunque:lo sai che Postgresql ha il supporto per l'ereditarietà out-of-the-box?

Riepilogo:dovresti usare trigger o evitare inserimenti di più righe!