Traffine I/O

Bahasa Indonesia

2023-03-20

Transaksi di PostgreSQL

Kontrol Transaksi di PostgreSQL

Di PostgreSQL, eksekusi operasi transaksi diatur oleh beberapa perintah penting:

  • BEGIN TRANSACTION
  • COMMIT
  • ROLLBACK

Perintah-perintah ini mengontrol tindakan memulai, menyimpan, dan membatalkan transaksi.

Perintah BEGIN TRANSACTION

Ketika mengelola transaksi di PostgreSQL, perintah BEGIN TRANSACTION merupakan titik awal. Anda dapat memulai transaksi dengan perintah ini, yang biasanya diikuti oleh serangkaian operasi manipulasi data seperti INSERT, UPDATE, atau DELETE.

Saat Anda memulai transaksi dengan perintah BEGIN atau BEGIN TRANSACTION, sistem memasuki blok transaksi, di mana semua operasi database selanjutnya menjadi bagian dari transaksi tersebut. Transaksi ini akan berlanjut hingga menemui perintah COMMIT atau ROLLBACK berikutnya. Transaksi juga secara otomatis akan dibatalkan (rollback) jika koneksi database ditutup atau jika terjadi kesalahan.

BEGIN;

atau

BEGIN TRANSACTION;

Perintah COMMIT

Setelah melakukan perubahan yang diperlukan dalam transaksi, perintah COMMIT digunakan untuk menyimpan perubahan-perubahan tersebut ke dalam database. Perintah ini memastikan semua modifikasi yang dilakukan dalam transaksi disimpan dan terlihat oleh transaksi lain. Perintah ini juga menandai akhir blok transaksi.

Ketika Anda menggunakan perintah COMMIT atau END TRANSACTION, semua perubahan yang dilakukan pada database sejak perintah COMMIT atau ROLLBACK terakhir akan disimpan.

COMMIT;

atau

END TRANSACTION;

Perintah ROLLBACK

Terkadang, Anda mungkin perlu membatalkan transaksi karena adanya kesalahan atau alasan lain. Dalam hal tersebut, perintah ROLLBACK berguna. Perintah ini akan membatalkan semua perubahan yang dilakukan oleh transaksi yang belum disimpan ke dalam database.

Perintah ROLLBACK hanya akan membatalkan transaksi sejak perintah COMMIT atau ROLLBACK terakhir diterbitkan.

ROLLBACK;

Batasan Pengendalian Transaksi

Meskipun perintah pengendalian transaksi di PostgreSQL menawarkan kontrol yang luas terhadap transaksi database Anda, mereka juga memiliki batasan-batasan tertentu.

Yang paling mencolok adalah perintah pengendalian transaksi hanya dapat digunakan dengan perintah bahasa manipulasi data (DML) seperti INSERT, UPDATE, dan DELETE. Mereka tidak berlaku saat menjalankan perintah bahasa definisi data (DDL) seperti CREATE TABLE atau DROP TABLE. Alasannya adalah bahwa di PostgreSQL, perintah DDL secara otomatis di-commit, yang berarti mereka tidak dapat di-rollback.

Contoh Demonstrasi

Misalkan kita memiliki tabel COMPANY dengan catatan berikut:

 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

ROLLBACK

Sekarang, mari kita mulai sebuah transaksi dan hapus catatan dari tabel yang memiliki age = 25. Kemudian, kita akan menggunakan perintah ROLLBACK untuk membatalkan semua perubahan.

postgres=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
ROLLBACK;

Jika Anda memeriksa tabel COMPANY lagi, Anda akan menemukan bahwa masih berisi catatan-catatan berikut:

 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

Hal ini terjadi karena kita telah membatalkan (rollback) transaksi, efektif mengembalikan operasi penghapusan yang kita lakukan sebelumnya.

COMMIT

Sekarang, mari kita mulai transaksi lain, hapus catatan dari tabel yang memiliki age = 25 lagi, tetapi kali ini kita menggunakan perintah COMMIT untuk menyimpan semua perubahan.

postgres=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
COMMIT;

Setelah memeriksa tabel COMPANY lagi, Anda akan melihat catatan-catatan berikut:

 id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  3 | Teddy |  23 | Norway     |  20000
  5 | David |  27 | Texas      |  85000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000
(5 rows)

Referensi

https://www.tutorialspoint.com/postgresql/postgresql_transactions.htm

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!