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

Perbarui urutan pada baris INSERT

Itu batasan yang diketahui:urutan bertambah selama panggilan nextval() function, yang merupakan nilai default bidang Anda. Saat Anda memberikan data di INSERT ke bidang itu, ekspresi nilai default tidak dievaluasi, itu sebabnya nilai urutan tidak disentuh.

Solusinya adalah menyiapkan pemicu sebelum/sesudah INSERT untuk memperbaiki nilai urutan secara manual dengan setval() . Tapi dengan cara ini Anda seharusnya perlu menyiapkan pemicu pada UPDATE di bidang itu juga, untuk memperbaiki nilai urutan, ketika Anda baru saja memperbarui beberapa id yang ada ke id yang lebih tinggi.

Solusi lain adalah, Anda menulis fungsi tersimpan, yang dapat menghasilkan nilai yang tersedia untuk bidang tersebut &menyetel nilai default bidang Anda ke nilai kembalian fungsi tersebut. Sesuatu, seperti:

LOOP
    result = nextval('my_id_seq');
    EXIT WHEN NOT EXISTS (SELECT * FROM my_table WHERE my_id = result);
END LOOP;
RETURN result;

Tetapi berhati-hatilah:fungsionalitas default untuk urutan aman untuk sisipan bersamaan (keadaan urutan saat ini bersifat global - transaksi independen). Jika Anda memberikan nilai eksplisit ke bidang tersebut, itu tidak akan terjadi.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Spring JPA + secara dinamis mengalihkan sumber data antar skema di postgresql

  2. mengapa tidak dapat melihat ukuran skema saya

  3. Memilih kolom dengan DISTINCT di PostgreSQL

  4. Masalah Kueri Asli Hibernasi dengan parameter bernama

  5. Kapan saya harus menggunakan kolom array vs. asosiasi di rel