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 satu baris kode sebelumnya - saya akan menjadi panduan ramah Anda dalam petualangan ini, mengambil dari tahun-tahun pengalaman mengajar saya untuk memastikan Anda mengerti setiap langkah.

PostgreSQL - Locks

Apa Itu Kunci?

Sebelum kita masuk ke hal yang mendalam, mari kita 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 orang lain yang bisa meminjam buku itu. Itu sebenarnya apa yang dilakukan kunci di basis data - menghindari banyak pengguna 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 Perlindungan baris tunggal dari modifikasi bersamaan
Kunci tingkat tabel Perlindungan tabel keseluruhan dari operasi tertentu
Kunci penasehat Kunci yang ditentukan pengguna untuk tujuan aplikasi khusus

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 memperbarui saldo untuk 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 tabel keseluruhan. 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 memperbarui semua baris. Itu seperti menaruh tanda "Jangan Ganggu" di seluruh rak buku saja!

Deadlock

Sekarang, mari bicarakan sesuatu yang lebih sulit: deadlock. Bayangkan dua orang masing-masing memegang buku yang orang lain inginkan. Kedua orang ini tidak bisa melanjutkan membaca sampai mereka mendapat buku yang lain, tetapi tidak ada yang mau menyerahkan buku mereka 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.

Beruntung, PostgreSQL dapat mendeteksi deadlock dan secara otomatis membatalkan salah satu transaksi untuk mengatasi situasi itu. Itu seperti petugas perpustakaan yang masuk untuk memecahkan masalah pertukaran buku!

Kunci Penasehat

Terakhir tapi bukan yang terpenting, mari bicarakan kunci penasehat. Kunci ini spesial karena Anda, pengembang, yang memutuskan kapan untuk menggunakannya. Itu seperti membuat tanda "Jangan Ganggu" sendiri di perpustakaan!

Berikut adalah contoh bagaimana Anda mungkin menggunakan kunci penasehat:

-- Ambil kunci penasehat
SELECT pg_advisory_lock(123);

-- Lakukan pekerjaan disini...

-- 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 melepaskannya.

Kunci penasehat sangat cocok untuk mengkoordinasi aktivitas dalam aplikasi Anda yang tidak terikat ke objek basis data tertentu. Sebagai contoh, Anda mungkin menggunakannya untuk memastikan hanya satu instance pekerjaan batch yang berjalan pada saat yang sama.

Kesimpulan

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

Saat Anda melanjutkan petualangan PostgreSQL Anda, Anda akan menemui banyak kasus yang kompleks terkait kunci. Tetapi jangan khawatir - dengan dasar ini, Anda siap untuk mengatasi tantangan tersebut. Tetap latihan, tetap curiga, dan selamat berkoding!

Credits: Image by storyset