PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Правила на PostgreSQL и проблем с nextval()/serial (много специфичен за PostgreSQL)

От документитеhttp://www.postgresql.org/docs/8.4/ static/rules.html

така че първо пренаписва заявките, без да изпълнява нищо.

можете да го накарате да работи, когато не вмъквате няколко записа наведнъж:

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

След това можете да направите:

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

но не

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

Така че наистина не трябва да използвате системата от правила с трудни currval() извиквания.

Освен това разгледайте коментарите на тези страници:

Друг съвет:поддръжката в пощенския списък на postgresql е толкова отлична, колкото и самата база данни!

И между другото:знаете ли, че postgresql има поддръжка за наследяване извън кутията?

Обобщение:трябва да използвате тригери или да избягвате вмъквания на няколко реда!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rails каква е разликата в уникалния индекс и validates_uniqueness_of

  2. Върната стойност кръстосано съединяване

  3. Rails:разрешението е отказано за relation schema_migrations

  4. Разглеждане на базата данни на heroku

  5. Обяснена команда за PostgreSQL VALUES