PostgreSQL 9.5 dan UPSERT

Kabar baik bagi Anda penggemar database PostgreSQL!

PostgreSQL versi 9.5 yang masih dalam pengembangan akan mendapatkan fitur baru, yakni UPSERT. Fitur UPSERT secara garis besar adalah operasi gabungan UPDATE atau INSERT yang dilakukan secara atomik.

Salah satu operasi yang dapat memanfaatkan fitur UPSERT ini adalah ketika kita ingin menambahkan order item pada aplikasi e-commerce. Hal yang perlu diperhatikan adalah kita ingin menambahkan order item apabila order item tersebut belum ada untuk order tertentu, atau apabila ternyata sudah ada, maka kita cukup menambahkan kolom quantity pada order item tersebut.

Dengan contoh skema table order_item dibawah:

+-----------------+
| order_item      |
+-----------------+
| id (PK)         |
| order_id (FK)   |
| product_id (FK) |
| quantity        |
| ...             |
+-----------------+

Maka operasi untuk menambahkan order item di suatu order yang dibuat customer dapat dibuat sebagai berikut:

INSERT INTO "order_item" (order_id, product_id, quantity) VALUES (42, 24, 1) 
ON CONFLICT DO UPDATE SET quantity = quantity + 1;

Sebelum ada fitur UPSERT, maka yang bisa kita lakukan adalah mencoba INSERT, melihat apakah terjadi unique constraint violation dan apabila iya, kemudian mencoba meng-update row yang bersangkutan. Lalu kita juga harus memperhatikan apakah terjadi race condition yang akan menyebabkan duplicate record atau hal-hal lain yang dapat membuat operasi tersebut gagal.

PostgreSQL 9.5 dan UPSERT

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s