Skip to content

Memahami Transaksi, Commit, Rollback, dan Save Point di PostgreSQL

Updated: at 19.05

Dalam dunia pengembangan aplikasi, pengelolaan data yang andal dan konsisten merupakan aspek yang sangat penting. PostgreSQL, sebagai salah satu sistem basis data relasional yang paling banyak digunakan, menyediakan fitur-fitur canggih untuk memastikan integritas data dan penanganan transaksi yang efisien. Di artikel ini, kita akan membahas konsep transaksi, serta perintah COMMIT, ROLLBACK, dan SAVE POINT yang umum digunakan dalam PostgreSQL.

Apa itu Transaksi?

Transaksi adalah serangkaian operasi basis data yang dilakukan sebagai satu unit kerja. Tujuan utama dari transaksi adalah untuk memastikan konsistensi data dan menjaga integritas basis data. Dalam transaksi, semua perubahan yang dilakukan harus berhasil atau gagal secara keseluruhan. Jika terjadi kesalahan atau kegagalan pada salah satu operasi, maka seluruh transaksi akan dibatalkan dan basis data akan dikembalikan ke keadaan sebelum transaksi dimulai.

PostgreSQL mendukung transaksi dengan menggunakan perintah BEGIN, COMMIT, dan ROLLBACK. Mari kita bahas lebih detail mengenai perintah-perintah tersebut.

Perintah BEGIN

Untuk memulai sebuah transaksi di PostgreSQL, Kita perlu menggunakan perintah BEGIN. Perintah ini menandai awal dari sebuah transaksi dan mempersiapkan basis data untuk menerima serangkaian operasi yang akan dilakukan.

Contoh penggunaan perintah BEGIN:

BEGIN;

Setelah perintah BEGIN dieksekusi, semua operasi basis data yang dilakukan setelahnya akan menjadi bagian dari transaksi tersebut.

Perintah COMMIT

Setelah melakukan serangkaian operasi dalam sebuah transaksi, Kita perlu mengakhiri transaksi dengan menggunakan perintah COMMIT. Perintah ini akan menyimpan semua perubahan yang dilakukan selama transaksi secara permanen ke basis data.

Contoh penggunaan perintah COMMIT:

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

Dalam contoh di atas, dua operasi UPDATE dilakukan dalam satu transaksi. Setelah perintah COMMIT dijalankan, perubahan pada saldo akun akan disimpan secara permanen.

Perintah ROLLBACK

Terkadang, Kita mungkin perlu membatalkan transaksi yang sedang berjalan karena alasan tertentu, seperti terjadinya kesalahan atau perubahan rencana. Dalam situasi seperti itu, Kita dapat menggunakan perintah ROLLBACK. Perintah ini akan membatalkan semua perubahan yang dilakukan dalam transaksi dan mengembalikan basis data ke keadaan sebelum transaksi dimulai.

Contoh penggunaan perintah ROLLBACK:

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- Oops, terjadi kesalahan atau perubahan rencana
ROLLBACK;

Dalam contoh di atas, operasi UPDATE dilakukan, tetapi kemudian transaksi dibatalkan dengan perintah ROLLBACK. Akibatnya, perubahan pada saldo akun tidak akan disimpan dan basis data akan kembali ke keadaan sebelum transaksi dimulai.

Save Point

Selain perintah ROLLBACK yang membatalkan seluruh transaksi, PostgreSQL juga menyediakan fitur SAVE POINT yang memungkinkan Kita untuk menandai titik tertentu dalam transaksi. Dengan menggunakan SAVE POINT, Kita dapat melakukan ROLLBACK ke titik tertentu tanpa membatalkan seluruh transaksi.

Contoh penggunaan SAVE POINT:

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
SAVEPOINT my_savepoint;
UPDATE accounts SET balance = balance + 200 WHERE id = 2;
-- Oops, terjadi kesalahan pada update kedua
ROLLBACK TO SAVEPOINT my_savepoint;
UPDATE accounts SET balance = balance + 50 WHERE id = 2;
COMMIT;

Dalam contoh di atas, transaksi dimulai dengan perintah BEGIN. Setelah operasi UPDATE pertama, sebuah SAVE POINT dengan nama “my_savepoint” dibuat. Kemudian, operasi UPDATE kedua dilakukan, tetapi ternyata terjadi kesalahan. Alih-alih membatalkan seluruh transaksi, kita dapat melakukan ROLLBACK ke titik “my_savepoint” menggunakan perintah ROLLBACK TO SAVEPOINT. Setelah itu, kita dapat melanjutkan transaksi dengan operasi UPDATE yang benar dan akhirnya mengakhiri transaksi dengan perintah COMMIT.

Contoh Penggunaan Transaksi

Sekarang, mari kita lihat contoh penggunaan transaksi dalam skenario nyata. Misalkan kita memiliki tabel employees dengan kolom id, name, dan salary. Kita ingin menggabungkan dua operasi: menambahkan karyawan baru dan memperbarui gaji karyawan yang sudah ada.

BEGIN;

-- Menambahkan karyawan baru
INSERT INTO employees (name, salary) VALUES ('John Doe', 50000);

-- Memperbarui gaji karyawan yang sudah ada
UPDATE employees SET salary = salary + 1000 WHERE id = 1;

-- Jika semua operasi berhasil, simpan perubahan
COMMIT;

Dalam contoh di atas, transaksi dimulai dengan perintah BEGIN. Kemudian, dua operasi dilakukan: INSERT untuk menambahkan karyawan baru dan UPDATE untuk memperbarui gaji karyawan yang sudah ada. Jika kedua operasi berhasil, perubahan akan disimpan secara permanen dengan perintah COMMIT.

Namun, jika terjadi kesalahan atau perubahan rencana, kita dapat membatalkan transaksi dengan perintah ROLLBACK:

BEGIN;

-- Menambahkan karyawan baru
INSERT INTO employees (name, salary) VALUES ('John Doe', 50000);

-- Memperbarui gaji karyawan yang sudah ada
UPDATE employees SET salary = salary + 1000 WHERE id = 1;

-- Oops, terjadi kesalahan atau perubahan rencana
ROLLBACK;

Dalam contoh ini, jika kita memutuskan untuk membatalkan transaksi dengan perintah ROLLBACK, maka penambahan karyawan baru dan pembaruan gaji karyawan yang sudah ada akan dibatalkan, dan basis data akan kembali ke keadaan sebelum transaksi dimulai.

Kesimpulan

Transaksi adalah fitur penting dalam PostgreSQL yang memungkinkan Kita untuk memastikan konsistensi data dan menjaga integritas basis data. Dengan menggunakan perintah BEGIN, COMMIT, ROLLBACK, dan SAVE POINT, Kita dapat mengelola transaksi dengan mudah dan efisien.

Ingatlah untuk selalu memulai transaksi dengan perintah BEGIN, mengakhiri transaksi dengan perintah COMMIT jika semua operasi berhasil, dan membatalkan transaksi dengan perintah ROLLBACK jika terjadi kesalahan atau perubahan rencana. Dengan memanfaatkan fitur transaksi ini, Kita dapat membangun aplikasi yang andal dan menjamin integritas data dalam basis data PostgreSQL Anda.