PostgreSQL - Kunci: Panduan untuk Pemula

Hai teman-teman, para ahli basis data masa depan! Hari ini, kita akan memulai sebuah perjalanan menarik ke dunia kunci PostgreSQL. Jangan khawatir jika Anda belum pernah menulis baris kode sebelumnya - saya akan menjadi panduan ramah Anda dalam petualangan ini, mengambil dari tahun-tahun pengalaman mengajar saya untuk memastikan Anda memahami setiap langkah.

PostgreSQL - Locks

Apa Itu Kunci?

Sebelum kita masuk ke hal yang lebih rinci, mari mulai dengan sebuah analogi sederhana. Bayangkan Anda berada di perpustakaan, dan Anda ingin meminjam buku. Anda mengambilnya dari rak, dan selama Anda membacanya, tidak ada yang lain bisa meminjam buku itu. Itu sebenarnya apa yang dilakukan kunci dalam basis data - menghindari beberapa pengguna untuk mengubah data yang sama pada saat yang sama, yang bisa menyebabkan kebingungan dan kesalahan.

Jenis Kunci di PostgreSQL

PostgreSQL menggunakan berbagai jenis kunci untuk mengelola akses bersamaan ke data. Berikut adalah tabel yang menggabungkan jenis utama:

Jenis Kunci Deskripsi
Kunci tingkat baris Melindungi baris individual dari modifikasi bersamaan
Kunci tingkat tabel Melindungi seluruh tabel dari operasi tertentu
Kunci advisory Kunci yang ditentukan pengguna untuk tujuan spesifik aplikasi

Sekarang, mari kita jelajahi ini lebih detil!

Kunci Tingkat Baris

Kunci tingkat baris adalah jenis yang paling umum Anda temui. Mereka secara otomatis diterapkan saat Anda memodifikasi data di tabel.

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- Baris dengan id = 1 sekarang terkunci
COMMIT;

Dalam contoh ini, saat Anda mulai memperbaharui saldo rekening 1, PostgreSQL secara otomatis mengunci baris itu. Jika transaksi lain mencoba untuk memodifikasi baris yang sama sebelum Anda melakukan commit, itu akan perlu menunggu.

Kunci Tingkat Tabel

Kunci tingkat tabel melindungi seluruh tabel. Mereka jarang digunakan tapi kadang-kadang diperlukan untuk operasi yang mempengaruhi seluruh tabel.

BEGIN;
LOCK TABLE accounts IN EXCLUSIVE MODE;
-- Seluruh tabel accounts sekarang terkunci
UPDATE accounts SET interest_rate = interest_rate + 0.01;
COMMIT;

Kode ini mengunci seluruh tabel accounts, kemudian memperbaharui semua baris. Itu seperti menempatkan tanda "Jangan Ganggu" di seluruh rak buku daripada hanya satu buku!

Deadlock

Sekarang, mari bicarakan sesuatu yang lebih sulit: deadlock. Bayangkan ada dua orang masing-masing memegang buku yang yang lain inginambil. Kedua orang tersebut tidak bisa terus membaca sampai mereka mendapat buku lain, tapi tidak ada yang akan menyerahkan buku saat ini. Itu deadlock!

Dalam PostgreSQL, deadlock dapat terjadi saat dua transaksi menunggu satu sama lain untuk melepaskan kunci. Berikut adalah contoh:

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

-- Transaksi 2 (berjalan bersamaan)
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 2;
UPDATE accounts SET balance = balance + 100 WHERE id = 1;

Jika transaksi ini berjalan pada saat yang sama, mereka mungkin deadlock: Transaksi 1 memegang kunci pada rekening 1 dan menunggu rekening 2, sedangkan Transaksi 2 memegang kunci pada rekening 2 dan menunggu rekening 1.

Fortunatelly, PostgreSQL dapat mendeteksi deadlock dan secara otomatis membatalkan salah satu transaksi untuk menyelesaikan situasi itu. Itu seperti petugas perpustakaan yang masuk untuk menyelesaikan masalah penukaran buku!

Kunci Advisory

Terakhir tapi bukan terpenting, mari bicarakan tentang kunci advisory. Ini khusus karena Anda, pengembang, bisa menentukan kapan untuk menggunakannya. Itu seperti membuat tanda "Jangan Ganggu" sendiri di perpustakaan!

Berikut adalah contoh bagaimana Anda mungkin menggunakan kunci advisory:

-- Ambil kunci advisory
SELECT pg_advisory_lock(123);

-- Lakukan pekerjaan di sini...

-- lepaskan kunci
SELECT pg_advisory_unlock(123);

Dalam contoh ini, 123 adalah nomor sembarang yang Anda pilih untuk mengidentifikasi kunci Anda. Setiap proses lain yang mencoba mengambil kunci dengan nomor yang sama akan perlu menunggu sampai Anda melepaskan itu.

Kunci advisory sangat baik untuk mengkoordinasikan kegiatan di aplikasi Anda yang tidak terikat ke objek basis data tertentu. Misalnya, Anda mungkin menggunakannya untuk memastikan hanya satu instance pekerjaan batch berjalan pada saat yang sama.

Kesimpulan

Dan itu adalah keseluruhan, teman-teman! Kita telah melakukan perjalanan melalui negeri kunci PostgreSQL, dari kunci tingkat baris yang umum hingga konsep yang lebih sulit seperti deadlock dan kunci advisory. Ingat, kunci adalah seperti lampu lalu lintas dari basis data Anda - mereka membantu menjaga semua hal berjalan mulus dan mencegah tabrakan.

Saat Anda terus menjalankan petualangan PostgreSQL Anda, Anda akan menemui lebih banyak kasus kompleks yang melibatkan kunci. Tetapi jangan khawatir - dengan dasar ini, Anda siap untuk menghadapi tantangan itu. Terus latihan, tetap curiga, dan selamat berkoding!

Credits: Image by storyset