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

PostgreSQL multi INSERT...KEMBALI dengan beberapa kolom

Gunakan CTE pengubah data untuk mengikat tiga INSERT Anda. Sesuatu seperti ini:

WITH ins1 AS (
   INSERT INTO table1 (username, name,  surname)
   VALUES ('johnee','john','smith')
   RETURNING user_id
   )
, ins2 AS (
   INSERT INTO table2 (user_id, password)
   SELECT ins1.user_id, 'secret'
   FROM   ins1                            -- nothing to return here
   )
INSERT INTO table3 (user_id, adress, city, phone)
SELECT ins1.user_id, ...
FROM   ins1
RETURNING user_id;
  • Biasanya yang terbaik adalah menambahkan daftar definisi kolom untuk INSERT s (kecuali untuk kasus khusus). Jika tidak, jika struktur tabel berubah, kode Anda mungkin rusak dengan cara yang mengejutkan.

  • Saya menghilangkan kolom di mana Anda hanya akan memasukkan DEFAULT . Default dimasukkan secara otomatis. Lebih pendek, hasil yang sama.

  • RETURNING final opsional mengembalikan user_id . yang dihasilkan - jelas dari urutan atau default lainnya. Ini sebenarnya user_id dari table3 , tapi itu sama kecuali Anda memiliki beberapa pemicu atau sihir lain yang mengganggu.

Lebih lanjut tentang CTE pengubah data (alias "dapat ditulis"):

  • Apakah kueri jenis SELECT satu-satunya jenis yang dapat disarangkan?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa cara yang tepat untuk menggunakan modul postgresql node.js?

  2. CS50:Operator LIKE, substitusi variabel dengan % ekspansi

  3. Alat GUI Teratas untuk PostgreSQL

  4. ScaleGrid PostgreSQL di VMware Cloud Infrastructure

  5. Bagaimana saya mendapatkan psycopg2 logging dari waktu eksekusi kueri?