PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Aturan PostgreSQL dan masalah nextval()/serial (sangat spesifik untuk PostgreSQL)

Dari dokumenhttp://www.postgresql.org/docs/8.4/ static/rules.html

jadi pertama-tama ia menulis ulang kueri tanpa menjalankan apa pun.

Anda dapat membuatnya bekerja ketika Anda tidak memasukkan banyak catatan sekaligus:

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

Kemudian Anda dapat melakukan:

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

tapi tidak

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

Jadi, Anda sebaiknya tidak menggunakan sistem aturan dengan panggilan currval() yang rumit.

Selain itu, lihat komentar di halaman ini:

Kiat lain:dukungan di milis postgresql sama bagusnya dengan mesin basis data itu sendiri!

Dan omong-omong:tahukah Anda bahwa postgresql memiliki dukungan untuk pewarisan bawaan?

Ringkasan:Anda harus menggunakan pemicu atau menghindari beberapa sisipan baris!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bisakah layanan PostgreSQL di cluster OpenShift menerima lalu lintas eksternal melalui rute yang terbuka?

  2. Cara terbaik untuk menginstal hstore pada banyak skema dalam database Postgres?

  3. Cara Mengotomatiskan Penerapan Database PostgreSQL

  4. postgresql:.pgpass tidak berfungsi

  5. Aplikasi Django dalam wadah Docker tidak dapat menemukan postgres