sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL's regels en nextval()/serieel probleem (zeer PostgreSQL-specifiek)

Uit de docshttp://www.postgresql.org/docs/8.4/ static/rules.html

dus het herschrijft eerst de queries zonder iets uit te voeren.

je kunt het laten werken als je niet meerdere records tegelijk invoegt:

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

Dan kun je het volgende doen:

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

maar niet

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

Dus je moet het regelssysteem echt niet gebruiken met lastige currval()-aanroepen.

Bekijk ook de opmerkingen op deze pagina's:

Nog een tip:de ondersteuning op de postgresql-mailinglijst is net zo uitstekend als de database-engine zelf!

En trouwens:weet je dat postgresql out-of-the-box ondersteuning biedt voor overerving?

Samenvatting:gebruik triggers of vermijd het invoegen van meerdere rijen!



  1. hoe getalwaarde in woorden weer te geven

  2. Initialiseer MariaDB 10.4.12 op CentOS 7.7

  3. hoe json-array als tabel uit mysql-tekstkolom te extraheren wanneer het aantal json-objecten in de array onbekend is?

  4. Booleaanse parameter voor opgeslagen Oracle-procedure