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

Postgres tidak mengembalikan lastval() dengan benar

Versi singkatnya di sini adalah menggunakan lastval yang tidak memenuhi syarat adalah ide yang buruk. Pemicu, aturan, dll dapat menyebabkan masalah.

Anda harus menghindari lastval sepenuhnya. Gunakan:

BEGIN;

INSERT INTO "users" ("email", "first_name", "last_name", "password", "objectstate_id", "activate_rid") 
VALUES ('[email protected]', 'Xpress', 'Care', 'f9fecdd84ee071806423adf30d6d6ff04e1a0a2c6688f2c057ddbab1d6b55d02', 4, 'EMQHTMMvViAB5BdYj0E6') 
RETURNING id;

dimana id harus dengan nama kolom kunci yang dihasilkan.

Pendekatan ini akan menangani sisipan multi-nilai dan INSERT INTO ... SELECT ... dengan benar, dan tidak akan mengalami masalah dengan pemicu yang menyentuh urutan.

Jika Anda harus menggunakan pendekatan berbasis panggilan fungsi, setidaknya gunakan currval('tablename_id_seq') (melewati nama urutan yang sesuai) alih-alih lastval .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Doktrin - Tambahkan cap waktu default ke entitas seperti SEKARANG ()

  2. Cara memilih data biner dari kolom postgres

  3. Rel semua pengguna dalam grup dengan jenis kelamin laki-laki

  4. Cara menggunakan struktur data cincin di fungsi jendela

  5. Salin struktur tabel ke tabel baru