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

PostgreSQL nilai berikutnya dari urutan?

RETURNING

Itu bisa dilakukan dengan sekali jalan pulang pergi ke basis data:

INSERT INTO tbl(filename)
VALUES ('my_filename')
RETURNING tbl_id;

tbl_id biasanya berupa serial atau IDENTITY (Postgres 10 atau lebih baru) kolom. Selengkapnya di manual.

Mengambil nilai secara eksplisit

Jika filename perlu menyertakan tbl_id (secara berlebihan), Anda masih dapat menggunakan satu kueri.

Gunakan lastval() atau currval() yang lebih spesifik :

INSERT INTO tbl (filename)
VALUES ('my_filename' || currval('tbl_tbl_id_seq')   -- or lastval()
RETURNING tbl_id;

Lihat:

  • Nilai referensi kolom serial di kolom lain selama INSERT yang sama

Jika beberapa urutan dapat dilanjutkan dalam proses (bahkan melalui pemicu atau efek samping lainnya) pasti caranya adalah dengan menggunakan currval('tbl_tbl_id_seq') .

Nama urutan

literal string 'tbl_tbl_id_seq' dalam contoh saya seharusnya aktual nama urutan dan dilemparkan ke regclass , yang memunculkan pengecualian jika tidak ada urutan nama itu yang dapat ditemukan di search_path saat ini .

tbl_tbl_id_seq adalah default yang dibuat secara otomatis untuk tabel tbl dengan kolom serial tbl_id . Tapi tidak ada jaminan. Default kolom dapat mengambil nilai dari apa saja urutan jika ditentukan. Dan jika nama default diambil saat membuat tabel, Postgres memilih nama gratis berikutnya berdasarkan algoritma sederhana.

Jika Anda tidak tahu nama urutan untuk serial kolom, gunakan fungsi khusus pg_get_serial_sequence() . Dapat dilakukan dengan cepat:

INSERT INTO tbl (filename)
VALUES ('my_filename' || currval(pg_get_serial_sequence('tbl', 'tbl_id'))
RETURNING tbl_id;

db<>main biola di sini
sqlfiddle lama



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah mungkin untuk menyediakan parameter untuk nama tabel atau kolom di Pernyataan yang Disiapkan atau QueryRunner.update()?

  2. PostgreSQL – Cara Menghilangkan Nilai Berulang

  3. Sumber Daya Pembelajaran &Pelatihan Teratas PostgreSQL

  4. Memasukkan array menggunakan permata Sekuel di PostgreSQL

  5. Bagaimana saya bisa mengirim beberapa permintaan http dari fungsi atau pemicu postgresql