7 poin oleh GN⁺ 2024-11-13 | 2 komentar | Bagikan ke WhatsApp

Hal-hal yang seandainya saya ketahui tentang Postgres

  • Luasnya dokumentasi Postgres: Dokumentasi resmi Postgres sangat bagus, tetapi jumlahnya sangat banyak sehingga sulit bagi engineer pemula untuk membacanya dari awal sampai akhir.

Normalisasi data

  • Normalisasi data: Proses menghapus data duplikat dari skema database. Misalnya, lebih baik tidak menaruh kolom user_email di tabel documents, lalu menghubungkannya ke tabel users dengan foreign key.
  • Kebutuhan denormalisasi: Terkadang denormalisasi diperlukan agar data tertentu bisa dibaca lebih cepat. Namun, data yang didenormalisasi membawa biaya berupa ketidakkonsistenan data atau meningkatnya kompleksitas penulisan.

Ikuti saran para pembuat Postgres

  • "Hal-hal yang tidak boleh dilakukan" di Wiki Postgres: Di Wiki Postgres resmi ada daftar "hal-hal yang tidak boleh dilakukan". Meski belum memahaminya sepenuhnya, itu tetap bisa membantu menghindari kesalahan.
  • Rekomendasi: Gunakan tipe text untuk menyimpan semua teks, gunakan tipe timestampz/time with time zone untuk semua timestamp, dan tulis nama tabel dalam snake_case.

Keanehan SQL yang umum

  • SQL tidak peka huruf besar-kecil: Keyword SQL tidak membedakan huruf besar dan kecil. Ini tidak terbatas pada Postgres saja.
  • Keanehan NULL: NULL di SQL berarti "tidak diketahui", dan ketika digabungkan dengan sebagian besar operator hasilnya menjadi NULL. Anda bisa membandingkan NULL dengan operator seperti IS NULL dan IS NOT NULL.

Membuat psql lebih berguna

  • Meningkatkan keterbacaan output: Anda bisa mengatur terminal pager agar output panjang lebih mudah dilihat. less dapat disetel sebagai pager.
  • Memperjelas NULL yang ambigu: Di psql, Anda dapat mengatur string yang mewakili NULL agar NULL terlihat jelas di output.
  • Menggunakan pelengkapan otomatis: psql mendukung auto-complete sehingga keyword SQL atau nama tabel bisa diketik dengan lebih mudah.

Efek menambahkan indeks

  • Definisi indeks: Indeks adalah struktur data yang membantu mengambil data dengan cepat.
  • Batasan indeks: Jika database lokal hampir tidak memiliki baris, indeks mungkin tidak terlalu berguna. Saat mengindeks beberapa kolom, urutannya penting.

Pemanfaatan JSONB

  • Kelebihan dan kekurangan JSONB: Postgres menyediakan kemampuan untuk menyimpan dan melakukan query pada JSON secara efisien, tetapi jika digunakan dengan keliru performanya bisa menurun.
  • Batasan struktural JSONB: Kolom JSONB tidak menjamin struktur, sehingga tidak sedokumentatif skema tabel standar.

Tips berguna lainnya

  • Masalah transaksi panjang: Jika transaksi berlangsung terlalu lama, hal itu dapat menghambat klien lain mengakses database.
  • Fitur kuat Postgres: Postgres menawarkan kekuatan database berorientasi dokumen, dan melalui JSONB dapat menyimpan serta melakukan query data secara efisien.

2 komentar

 
bbulbum 2024-11-19

Saya harus membacanya suatu saat nanti tentang hal-hal yang tidak boleh dilakukan.

 
GN⁺ 2024-11-13
Komentar Hacker News
  • Postgres membedakan huruf besar dan kecil, tetapi penulisan keyword dengan huruf besar dalam query dilakukan untuk meningkatkan keterbacaan. Ini tidak wajib, tetapi berguna untuk memformat query agar lebih mudah dibaca saat debugging

    • Mirip seperti perapian kode di bahasa lain, indentasi yang konsisten dan semacamnya dapat mengurangi waktu pemahaman sehingga kita bisa fokus pada bagian yang penting
    • Saya ingin menghindari penggunaan huruf besar dalam identifier seperti actuallyUsingCaseInIdentifiers
  • Saya baru pertama kali menemukan entri wiki "Don't Do This", dan itu sangat berguna

  • Banyak isinya tidak terbatas pada Postgres saja (misalnya: keanehan null, urutan kolom indeks, dll.)

    • Misalnya, cara null berinteraksi dengan indeks dan batasan unik juga tidak intuitif di MySQL
    • Jika pada tabel pengguna ada kolom email yang tidak boleh null dan kolom username yang boleh null, lalu ada batasan unik seperti (email, username), maka email yang sama bisa dimasukkan beberapa kali dengan username null
  • Saran untuk menormalisasi data perlu disikapi dengan hati-hati

    • Penulis menyebutkan 10 jenis normalisasi yang berbeda, tetapi kebanyakan orang tidak perlu menggunakan 7 di antaranya
  • Saya berharap para developer lebih memperhatikan normalisasi dan berhenti memasukkan semuanya ke dalam kolom JSON(b)

  • Kata "journey" terasa menjengkelkan di blog karena terlalu sering dipakai

  • Bagian kode sangat tidak nyaman di mobile, sampai-sampai hampir tidak bisa di-scroll

  • Dalam spesifikasi JSON, null adalah nilai konstan, dan berbeda dari SQL NULL

  • Menambahkan indeks bisa saja sama sekali tidak memberi efek apa pun

    • Ada bagian dari filosofi Postgres yang terasa terlalu kuat atau sulit dipahami
    • Saya berharap dukungan hint akan ditambahkan di versi mendatang
  • Membaca artikel seperti ini dan bisa memahami 90%-nya membuat saya merasa bangga pada pekerjaan yang pernah saya jalani