Introduction
Last updated
Last updated
PostgreSQL adalah basis data relasional open-source yang terkenal, dengan slogan yang menyatakan ambisinya untuk menjadi basis data open-source paling canggih di dunia. Kualitas utama yang menarik banyak pengguna baru setiap tahun dan membuat pengguna lama tetap antusias terhadap PostgreSQL adalah stabilitasnya yang kokoh (rock-solid stability), skalabilitas, keamanan, serta berbagai fitur yang harus dimiliki oleh sistem manajemen basis data untuk level enterprise.
Meskipun PostgreSQL adalah basis data relasional, ekosistemnya telah berkembang seiring waktu, menyediakan platform yang kaya dengan ekstensi, alat, dan bahasa pemrograman yang terhubung melalui komunitas yang tersebar di seluruh dunia. PostgreSQL adalah proyek open-source yang sepenuhnya dikembangkan dalam dunia open-source. Ini berarti tidak ada entitas tunggal yang mengendalikan proyek, sehingga PostgreSQL bukanlah produk komersial. Dengan kata lain, PostgreSQL adalah milik semua orang, dan siapa pun dapat berkontribusi. Berkat lisensi gaya BSD yang sangat permisif, PostgreSQL dapat digunakan dalam proyek atau skenario apa pun, baik open-source maupun closed-source.
Tentu saja, berkontribusi pada proyek sebesar dan sekompleks PostgreSQL memerlukan pengalaman dalam pengembangan perangkat lunak, konsep basis data, dan sikap positif terhadap upaya open-source dan kolaboratif. Karena sifatnya yang open-source, PostgreSQL akan terus hidup hampir selamanya tanpa risiko sebuah perusahaan bangkrut dan menyeret basis data tersebut bersama mereka. Pengembang resmi PostgreSQL umumnya dikenal sebagai PostgreSQL Global Development Group (PGDG), dan mereka adalah pengembang yang, setelah diskusi dan koordinasi, mengimplementasikan fitur-fitur utama dan menghasilkan rilis baru. PGDG merilis versi produksi baru sekali setiap tahun, biasanya pada kuartal terakhir.
Pada saat penulisan ini, PostgreSQL 16 adalah rilis produksi terbaru dari mesin basis data ini, dan seperti biasa, upaya untuk rilis berikutnya (PostgreSQL 17) sedang berlangsung. Series ini akan fokus pada bagaimana Anda bisa memaksimalkan PostgreSQL, mulai dari dasar-dasar (mengelola pengguna, tabel data, indeks, dll.) hingga fitur-fitur paling menarik dan kompleks (seperti replikasi data untuk mencegah bencana / disasters). Kami akan mengambil pendekatan praktis dengan berbagai contoh agar pembaca dapat memahami setiap konsep dengan lebih baik dan memperoleh pengetahuan dengan cara yang lebih menyenangkan dan cepat. Pada akhirnya, Anda akan mampu mengelola klaster PostgreSQL secara penuh dan, berkat sumber daya yang ditunjukkan di setiap bab, Anda akan dapat meneliti lebih banyak fitur.
Buku ini mencakup PostgreSQL 16, tetapi konsep-konsep yang dijelaskan juga dapat diterapkan pada versi yang lebih baru (serta versi sebelumnya di mana fitur yang sama ada). Faktanya, meskipun beberapa alat mungkin berubah di rilis mendatang (misalnya, menambah atau menghapus beberapa opsi), konsep dasar yang dijelaskan dalam buku ini akan tetap sama terlepas dari versi PostgreSQL.
Bab ini akan memperkenalkan Anda pada basis data open-source hebat ini, mulai dari sejarah proyek dan tujuannya. Anda akan mempelajari terminologi dasar PostgreSQL, yang sangat penting untuk membantu Anda mencari dokumentasi dan memahami pesan kesalahan utama jika diperlukan. Terakhir, Anda akan melihat cara menginstal PostgreSQL dengan berbagai cara sehingga Anda akan mendapatkan pengetahuan dasar tentang cara menginstalnya pada platform dan konteks yang berbeda.
Topik yang Dibahas dalam Bab Ini:
Sekilas tentang PostgreSQL
Terminologi pada PostgreSQL
Menginstal PostgreSQL 16
Persyaratan teknis
Kode untuk bab ini dapat ditemukan di repositori GitHub berikut: .
Instance tunggal dapat menampung lebih dari 4 miliar basis data individu, masing-masing dengan ukuran total tak terbatas dan kapasitas untuk lebih dari 1 miliar tabel, masing-masing berisi hingga 32 terabyte data. Selain itu, jika ada kekhawatiran bahwa batas atas tersebut tidak cukup, sebuah tabel dapat memiliki hingga 1.600 kolom, masing-masing berukuran 1 GB, dengan jumlah indeks multi-kolom yang tidak terbatas (hingga 32 kolom). Singkatnya, PostgreSQL dapat menyimpan data jauh lebih banyak daripada yang mungkin Anda bayangkan!
Meskipun PostgreSQL dapat menangani jumlah data yang sangat besar, ini tidak berarti Anda harus menggunakannya sebagai tempat pembuangan data atau penyimpanan serba guna. Untuk bekerja dengan baik pada basis data besar tertentu, Anda perlu memahami PostgreSQL dan fitur-fiturnya, sehingga dapat mengatur dan mengelola dataset Anda dengan baik.
PostgreSQL sepenuhnya mematuhi prinsip ACID (lihat penjelasan di bawah) dan memiliki fondasi yang sangat kuat dalam integritas data dan konkurensi. PostgreSQL dilengkapi dengan bahasa prosedural bernama PL/PgSQL, yang dapat digunakan untuk menulis potongan kode yang dapat digunakan kembali, seperti fungsi dan prosedur. PostgreSQL juga mendukung trigger (sebelum dan sesudah), view, materialized view, tabel terpartisi, foreign data wrapper, beberapa schema, kolom yang dihasilkan secara otomatis, dan lain-lain. Semua konsep ini akan dijelaskan pada bab-bab berikutnya.
Penjelasan ACID: ACID adalah akronim dari sifat-sifat yang menunjukkan bahwa mesin basis data menyediakan atomicity (atomisitas), consistency (konsistensi), isolation (isolasi), dan durability (daya tahan).
Atomisitas berarti bahwa operasi basis data yang kompleks diproses sebagai satu instruksi tunggal meskipun terdiri dari beberapa operasi berbeda.
Konsistensi memastikan bahwa data dalam basis data selalu konsisten dan tidak rusak karena operasi yang hanya dilakukan sebagian.
Isolasi memungkinkan basis data menangani konkurensi dengan cara yang “benar”, yaitu tanpa data yang rusak akibat perubahan yang saling tumpang tindih.
Daya tahan berarti bahwa mesin basis data dirancang untuk melindungi data yang dikandungnya, bahkan dalam kasus kegagalan perangkat lunak atau perangkat keras, sejauh mungkin.
PostgreSQL dapat diperluas dengan bahasa tertanam lainnya, seperti Perl, Python, Java, dan bahkan Bash! Jika Anda merasa basis data tidak menyediakan cukup fitur, Anda dapat memasang ekstensi untuk mendapatkan perilaku dan peningkatan yang berbeda, misalnya, Sistem Informasi Geospasial (GIS), pekerjaan terjadwal, tipe data khusus, dan utilitas secara umum. Utilitas dan peningkatan ini tidak akan dibahas dalam buku ini, tetapi berkat pengetahuan yang diberikan buku ini, Anda akan dapat memanfaatkan dokumentasi online dari utilitas tersebut untuk mengoptimalkannya.
PostgreSQL dapat berjalan di hampir semua sistem operasi, termasuk Linux, Unix, macOS X, dan Microsoft Windows, bahkan pada perangkat keras sederhana seperti papan Raspberry Pi. Banyak penyedia layanan komputasi awan juga mencantumkan PostgreSQL dalam katalog perangkat lunak mereka. Berkat mekanisme penyetelan yang ekstensif, PostgreSQL dapat diadaptasi dengan sangat baik pada platform hosting. Komunitas bertanggung jawab menjaga basis data dan dokumentasi pada tingkat kualitas yang sangat tinggi, dan daftar email serta saluran IRC sangat responsif serta menjadi sumber berharga untuk solusi masalah dan ide-ide baru.
Berdasarkan pengalaman penulis, belum pernah ada kasus di mana PostgreSQL tidak dapat diadaptasi untuk skenario aplikasi apa pun.
PostgreSQL mengambil nama dari pendahulunya: Ingres. Ingres adalah basis data relasional yang dikembangkan oleh Profesor Michael Stonebraker. Pada tahun 1986, Profesor Stonebraker memulai proyek pasca-Ingres untuk mengembangkan fitur-fitur baru yang inovatif dalam lanskap basis data dan menamakan proyek ini POSTGRES (POST-Ingres). Proyek ini bertujuan untuk mengembangkan basis data relasional-objek, di mana “objek” berarti pengguna dapat memperluas basis data dengan objek mereka sendiri, seperti tipe data, fungsi, dan lain-lain.
Pada tahun 1994, POSTGRES dirilis dengan versi 4.2 dan lisensi MIT, yang membuka kolaborasi dengan pengembang lain di seluruh dunia. Pada saat itu, POSTGRES menggunakan bahasa kueri internal bernama QUEL. Dua mahasiswa Berkeley, Andrew Yu dan Jolly Chen, mengganti bahasa kueri QUEL dengan bahasa SQL yang sedang populer, dan fitur ini sangat inovatif sehingga proyek ini mengubah namanya menjadi Postgre95 untuk menekankan perbedaan dibandingkan versi sebelumnya.
Pada tahun 1996, proyek ini mendapatkan server publik untuk menampung kode, dan lima pengembang, termasuk Marc G. Fournier, Tom Lane, dan Bruce Momjan, memulai pengembangan proyek yang baru diberi nama PostgreSQL. Sejak saat itu, proyek ini telah dijaga dalam kondisi baik dan terus diperbarui. Ini juga berarti bahwa PostgreSQL telah dikembangkan selama hampir 30 tahun, sekali lagi menekankan soliditas dan keterbukaan proyek itu sendiri. Jika Anda penasaran, Anda juga dapat menelusuri kode sumber hingga ke komit awal di dunia open-source:
PostgreSQL 16 dirilis pada 14 September 2023. Versi ini mencakup berbagai peningkatan, termasuk:
Berbagai optimasi performa, mulai dari alokasi dan manajemen memori internal hingga perilaku yang lebih diparalelkan secara default.
Set izin baru untuk pengguna dan grup, termasuk grup sistem baru untuk memberikan kemampuan spesifik.
Mekanisme konfigurasi yang ditingkatkan untuk mempermudah penyertaan file dan mencocokkan pengguna serta host menggunakan ekspresi reguler.
Set fungsi JSON yang lebih lengkap.
Mesin replikasi logis yang ditingkatkan, memungkinkan dekoding bahkan pada server siaga (standby).
Kolom utilitas mendapatkan opsi baru untuk menyesuaikan kebutuhan administrator.
Seperti rilis lainnya, PostgreSQL 16 juga berisi perubahan yang bertujuan mempermudah kehidupan Administrator Basis Data (DBA), misalnya, menghapus opsi yang saling bertentangan dan istilah serta tipe SQL yang sudah usang. Ini menegaskan bahwa pengembang PostgreSQL selalu memperhatikan basis data dan kepatuhannya terhadap standar SQL saat ini.
Pengembang PostgreSQL merilis versi utama baru sekali setiap tahun, biasanya sekitar bulan Oktober. Versi utama adalah versi stabil yang memperkenalkan fitur baru dan kemungkinan ketidakcocokan dengan versi sebelumnya. Selama siklus hidupnya, versi utama terus ditingkatkan melalui rilis minor, yang biasanya merupakan perbaikan bug dan pemeliharaan.
Nomor versi PostgreSQL mengidentifikasi rilis utama dan minor. Nomor versi ditentukan sebagai major.minor; misalnya, 16.0 menunjukkan rilis utama pertama, 16, sedangkan 16.1 menunjukkan rilis minor, 1, dari rilis utama 16. Singkatnya, semakin besar angkanya, semakin baru versi yang Anda kelola.
Versi utama PostgreSQL yang berbeda tidak kompatibel, sedangkan versi minor kompatibel. Apa artinya ketidakcocokan ini? PostgreSQL menyimpan data dalam format biner, dan format ini dapat berubah antar versi utama. Ini berarti, meskipun Anda dapat meningkatkan PostgreSQL antar versi minor secara langsung, Anda mungkin perlu melakukan dump dan restore konten basis data Anda saat meningkatkan antar versi utama.
Rekomendasi, seperti halnya perangkat lunak lain, adalah menjalankan versi PostgreSQL terbaru yang tersedia untuk Anda. Pengembang PostgreSQL berupaya keras untuk menyediakan produk bebas bug, tetapi fitur baru dapat memperkenalkan bug baru, dan meskipun PostgreSQL memiliki platform pengujian yang sangat ekstensif, perangkat lunak tetaplah perangkat lunak, dan perangkat lunak memiliki bug. Terlepas dari bug internal, rilis baru juga mencakup perbaikan untuk eksploitasi keamanan dan peningkatan performa, jadi merupakan kebiasaan yang sangat baik untuk selalu memperbarui server PostgreSQL yang sedang berjalan.
Terakhir, tidak semua versi PostgreSQL akan hidup selamanya. PostgreSQL menyediakan dukungan dan pembaruan selama lima tahun setelah rilis baru diterbitkan. Setelah periode ini, versi utama akan mencapai End Of Life (EOL), dan pengembang PostgreSQL tidak akan lagi memeliharanya. Ini tidak berarti Anda tidak dapat menjalankan versi PostgreSQL yang sudah kuno; ini hanya berarti versi tersebut tidak akan mendapatkan pembaruan dari proyek resmi dan, oleh karena itu, akan ketinggalan zaman. Sebagai contoh, karena PostgreSQL 16 dirilis pada tahun 2023, versi ini akan mencapai EOL pada tahun 2028. Perlu diingat bahwa menjalankan rilis EOL bukan hanya soal tidak mendapatkan pembaruan, tambalan keamanan, atau perbaikan bug baru; Anda akan sendirian dan tidak akan menemukan bantuan saat mengalami masalah.
Untuk memahami cara kerja PostgreSQL dan mengikuti contoh-contoh dalam bab-bab buku ini, kami perlu memperkenalkan terminologi yang digunakan dalam PostgreSQL dan komunitas penggunanya.
PostgreSQL adalah layanan, yang berarti berjalan sebagai daemon di sistem operasi; sebuah daemon PostgreSQL yang berjalan disebut instansi. Instansi PostgreSQL sering disebut klaster karena sebuah instansi tunggal dapat melayani dan menangani beberapa basis data. Setiap basis data adalah ruang terisolasi tempat pengguna dan aplikasi dapat menyimpan data.
Sebuah basis data diakses oleh pengguna yang diizinkan, tetapi pengguna yang terhubung ke sebuah basis data tidak dapat melintasi batas basis data dan berinteraksi dengan data yang ada di basis data lain kecuali mereka secara eksplisit terhubung ke basis data tersebut juga.
Sebuah basis data dapat diorganisir ke dalam namespace yang disebut schema. Schema adalah nama mnemonik yang dapat ditetapkan pengguna untuk mengatur objek basis data, seperti tabel, ke dalam koleksi yang lebih terstruktur. Schema tidak dapat bersarang, sehingga mereka mewakili namespace datar.
Objek basis data diwakili oleh segala sesuatu yang dapat dibuat dan dikelola pengguna dalam basis data—misalnya, tabel, fungsi, trigger, dan tipe data. Setiap objek hanya milik satu schema yang, jika tidak ditentukan, dinamai sesuai dengan pengguna yang membuat objek tersebut.
Catatan tentang Schema Default: Pada versi PostgreSQL sebelum 15, setiap objek baru milik schema default bernama public jika tidak ditentukan lain. Sejak PostgreSQL 15, setiap pengguna diberikan schema pribadi, dan objek milik schema tersebut kecuali nama schema lain ditentukan secara eksplisit.
Pengguna didefinisikan pada tingkat klaster, yang berarti mereka tidak terikat pada basis data tertentu dalam klaster. Seorang pengguna dapat terhubung dengan dan mengelola basis data apa pun dalam klaster yang diizinkan untuk mereka.
PostgreSQL membagi pengguna ke dalam dua kategori utama:
Pengguna normal: Pengguna ini dapat terhubung ke dan menangani basis data serta objek tergantung pada set izin mereka.
Superuser: Pengguna ini dapat melakukan apa saja dengan objek basis data apa pun.
PostgreSQL memungkinkan konfigurasi superuser sebanyak yang Anda butuhkan, dan setiap superuser memiliki izin yang sama: mereka dapat melakukan segalanya dengan setiap basis data dan objek, serta dapat mengontrol siklus hidup klaster (misalnya, mereka dapat mengakhiri koneksi pengguna normal, memuat ulang konfigurasi, menghentikan seluruh klaster, dan sebagainya).
Data internal PostgreSQL, seperti pengguna, basis data, namespace, konfigurasi, dan status runtime basis data, disediakan melalui katalog: tabel dan view khusus yang menyajikan informasi dengan cara interaktif SQL. Banyak katalog dipangkas tergantung pada pengguna yang memeriksanya, kecuali bahwa superuser biasanya melihat seluruh set informasi yang tersedia.
PostgreSQL menyimpan data pengguna (misalnya, tabel) dan status internalnya pada sistem file lokal. Ini adalah poin penting yang perlu diingat: PostgreSQL bergantung pada sistem file yang mendasarinya untuk mengimplementasikan persistensi, sehingga penyetelan sistem file adalah tugas penting untuk membuat PostgreSQL berkinerja baik. Secara khusus, PostgreSQL menyimpan semua kontennya (data pengguna dan status internal) dalam satu direktori sistem file yang dikenal sebagai PGDATA. Direktori PGDATA mewakili apa yang disajikan klaster sebagai basis data, sehingga Anda dapat memiliki satu instalasi PostgreSQL dan membuatnya beralih ke direktori PGDATA yang berbeda untuk menyampaikan konten yang berbeda. Seperti yang akan Anda lihat di bagian berikut, direktori PGDATA perlu diinisialisasi sebelum dapat digunakan oleh PostgreSQL; inisialisasi adalah pembuatan struktur direktori di dalam PGDATA itu sendiri dan, tentu saja, merupakan operasi sekali pakai.
Isi rinci dari PGDATA akan dijelaskan pada bab berikutnya, tetapi untuk saat ini, cukup untuk mengingat bahwa direktori PGDATA adalah tempat PostgreSQL mengharapkan menemukan data dan file konfigurasi. Secara khusus, direktori PGDATA terdiri dari setidaknya Write-Ahead Logs (WAL) dan penyimpanan data. Tanpa salah satu dari kedua bagian tersebut, klaster tidak dapat menjamin konsistensi data dan, dalam beberapa keadaan kritis, bahkan tidak dapat memulai.
WAL adalah teknologi yang digunakan oleh banyak sistem basis data, dan ide dasar cara kerjanya mirip dengan teknologi lain seperti sistem file transaksional (seperti ZFS, UFS dengan Soft Updates, dan sebagainya). Idenya adalah, sebelum menerapkan perubahan pada sepotong data, sebuah intent log akan dibuat secara permanen. Dalam kasus ini, jika klaster mengalami crash, ia selalu dapat mengandalkan intent log yang sudah ditulis untuk memahami operasi mana yang telah selesai dan apa yang harus dipulihkan (detail lebih lanjut tentang ini di bab-bab berikutnya). Harap diperhatikan bahwa dengan istilah “crash,” kami merujuk pada segala kemungkinan bencana yang dapat menimpa klaster Anda, termasuk bug perangkat lunak, tetapi lebih mungkin karena kegagalan listrik, kegagalan hard disk, dan sebagainya. PostgreSQL berkomitmen untuk memberikan konsistensi data terbaik yang bisa, dan oleh karena itu, ia berusaha keras untuk memastikan bahwa intent log (WAL) seaman mungkin.
Secara internal, PostgreSQL melacak struktur tabel, indeks, fungsi, dan semua hal yang diperlukan untuk mengelola klaster dalam penyimpanan khususnya, yaitu katalog.
Catatan tentang Information Schema: Standar SQL mendefinisikan apa yang disebut information schema, yaitu koleksi tabel yang umum untuk semua implementasi basis data standar, termasuk PostgreSQL, yang dapat digunakan oleh DBA untuk memeriksa status internal basis data itu sendiri. Misalnya, information schema mendefinisikan tabel yang mengumpulkan informasi tentang semua tabel yang ditentukan pengguna sehingga memungkinkan untuk mengkueri information schema untuk melihat apakah tabel tertentu ada atau tidak. Katalog PostgreSQL bisa disebut sebagai “information schema yang ditingkatkan”: katalog jauh lebih akurat dan spesifik untuk PostgreSQL, dan DBA dapat mengekstrak lebih banyak informasi tentang status PostgreSQL dari katalog. Tentu saja, PostgreSQL mendukung information schema, tetapi sepanjang buku ini, Anda akan melihat referensi ke katalog karena mereka memberikan informasi yang jauh lebih rinci.
Ketika klaster dimulai, PostgreSQL meluncurkan proses tunggal yang disebut postmaster. Tujuan postmaster adalah untuk mem-bootstrap instansi, memunculkan proses yang diperlukan untuk mengelola aktivitas basis data, dan kemudian menunggu koneksi yang masuk. Koneksi pengguna, yang sering dilakukan melalui koneksi TCP/IP, memerlukan postmaster untuk mem-fork proses lain yang disebut backend process, yang bertugas melayani satu dan hanya satu koneksi.
Ini berarti bahwa setiap kali koneksi baru terhadap klaster dibuka, klaster bereaksi dengan meluncurkan proses backend baru untuk melayaninya hingga koneksi berakhir dan proses tersebut, akibatnya, dihancurkan. Postmaster biasanya juga memulai beberapa proses utilitas yang bertanggung jawab untuk menjaga PostgreSQL dalam kondisi baik saat berjalan; proses-proses ini akan dibahas nanti, di bab ini dan bab berikutnya.
Untuk meringkas, PostgreSQL menyediakan executable yang dapat diinstal di mana saja pada sistem Anda dan dapat melayani satu klaster. Klaster, pada gilirannya, menyajikan data dari satu direktori PGDATA yang berisi, antara lain, data pengguna, status internal klaster, katalog, dan WAL. Setiap kali klien terhubung ke server, proses postmaster mem-fork proses backend baru yang bertugas melayani koneksi tersebut.
Berikut adalah rekap singkat dari istilah-istilah paling kompleks yang digunakan dalam PostgreSQL:
Klaster: Seluruh layanan PostgreSQL.
Postmaster: Proses pertama yang dijalankan klaster, dan proses ini bertanggung jawab untuk melacak aktivitas seluruh klaster. Postmaster memunculkan proses backend setiap kali koneksi baru dibuat.
Basis data: Kontainer data terisolasi yang dapat dihubungkan oleh pengguna (atau aplikasi). Sebuah klaster dapat menangani beberapa basis data. Basis data dapat terdiri dari berbagai objek, termasuk schema (namespace), tabel, trigger, dan objek lain yang akan Anda lihat seiring kemajuan buku ini.
PGDATA: Direktori pada penyimpanan persisten yang sepenuhnya didedikasikan untuk PostgreSQL dan datanya. PostgreSQL menyimpan data dalam direktori tersebut.
WAL: Log intent dari perubahan basis data, digunakan untuk memulihkan data dari crash kritis.
Sekarang setelah kami membahas terminologi dasar terkait PostgreSQL, saatnya untuk menginstalnya di mesin Anda.
PostgreSQL dapat berjalan pada beberapa sistem operasi, terutama sistem Unix dan Unix-like, termasuk Linux, serta pada Microsoft Windows 11 atau lebih tinggi. Sejauh ini, platform yang paling didukung adalah Linux karena sebagian besar pengembang PostgreSQL bekerja pada platform ini, sehingga ini adalah platform dengan kasus penggunaan yang paling banyak diuji. Namun, penyebaran pada platform lain yang didukung seharusnya tidak menimbulkan masalah dan tidak akan membahayakan data Anda.
Bagian ini akan fokus pada penginstalan PostgreSQL 16, karena ini adalah versi stabil terbaru yang tersedia di seluruh dunia. Namun, Anda akan belajar cara membangun versi PostgreSQL Anda sendiri, dan ini juga dapat menjadi cara untuk menginstal versi lain dari PostgreSQL di masa depan.
Sebelum menginstal PostgreSQL, Anda perlu memilih, atau setidaknya mengevaluasi, cara menginstalnya. Ada dua cara utama untuk membuat PostgreSQL berjalan:
Kompilasi dari sumber
Menggunakan paket biner
Paket biner disediakan oleh komunitas PostgreSQL atau sistem operasi, dan menggunakannya memiliki keuntungan bahwa mereka dapat memberikan instalasi PostgreSQL yang lancar. Selain itu, paket biner tidak memerlukan toolchain kompilasi dan oleh karena itu jauh lebih mudah diadopsi. Terakhir, paket biner mematuhi konvensi sistem operasi yang dibuatnya (misalnya, di mana menempatkan file konfigurasi), dan pembaruan dapat dikelola oleh sistem operasi juga. Karena paket biner perlu dibuat sebelumnya oleh vendor, mereka mungkin tidak mencerminkan versi terbaru yang dirilis. Misalnya, ketika PGDG merilis pembaruan minor baru, sistem operasi memerlukan beberapa hari untuk mengeluarkan paket biner dengan pembaruan tersebut untuk semua platform yang didukung.
Di sisi lain, menginstal dari sumber memerlukan toolchain kompilasi, serta lebih banyak waktu dan konsumsi CPU untuk membangun executable PostgreSQL. Anda memiliki kontrol penuh atas komponen mana yang akan tersedia di produk akhir dan dapat memangkas serta mengoptimalkan instansi Anda untuk performa sangat tinggi dan mengurangi konsumsi sumber daya seminimal mungkin. Namun, dalam jangka panjang, Anda akan bertanggung jawab untuk memelihara instalasi dan meningkatkannya dengan cara yang serupa.
Apa yang Harus Diinstal
PostgreSQL terbagi dalam beberapa komponen untuk diinstal:
Server PostgreSQL: Bagian yang dapat melayani basis data Anda ke aplikasi dan pengguna, dan diperlukan untuk menyimpan data Anda.
Klien PostgreSQL: Pustaka dan alat klien untuk terhubung ke server basis data. Tidak diperlukan jika Anda tidak perlu terhubung ke basis data pada mesin yang sama, tetapi diperlukan pada mesin klien.
Paket contrib PostgreSQL: Kumpulan ekstensi dan utilitas terkenal yang dapat meningkatkan pengalaman PostgreSQL Anda. Paket tambahan ini dikembangkan oleh PGDG dan oleh karena itu terintegrasi dengan baik dan stabil.
Dokumentasi PostgreSQL: Dokumentasi (misalnya, halaman man) terkait server dan klien.
PL/Perl, PL/Python, dan PL/Tcl PostgreSQL: Tiga komponen untuk memungkinkan penggunaan bahasa pemrograman—Perl, Python, dan Tcl, masing-masing—langsung dalam server PostgreSQL.
Set komponen yang direkomendasikan adalah server, klien, dan modul contrib; modul ini akan digunakan di seluruh buku. Anda bebas memutuskan apakah akan menginstal komponen lain sesuai keinginan, tetapi buku ini tidak akan merinci masing-masing komponen tersebut.
Menginstal PostgreSQL dari Paket Biner
Untuk lebih memahami konsep-konsep yang dijelaskan dalam buku ini, kami merekomendasikan pembaca untuk mencoba contoh kode sendiri; oleh karena itu, Anda akan memerlukan instansi PostgreSQL yang tersedia. Meskipun pilihan terbaik untuk mendapatkan instansi PostgreSQL lengkap adalah menginstalnya pada mesin virtual atau komputer fisik, kami juga telah menyediakan serangkaian image Docker sebagai instansi PostgreSQL yang dikontainerisasi untuk dijalankan dan bereksperimen. Oleh karena itu, Anda dapat memilih antara melakukan instalasi penuh atau pengaturan Docker cepat untuk menyiapkan mesin PostgreSQL. Namun, penting bagi setiap DBA untuk dapat menginstal PostgreSQL pada beberapa sistem, dan oleh karena itu, bagian ini bertujuan untuk menunjukkan cara melakukan instalasi lengkap dari awal pada beberapa sistem operasi Unix-like yang populer, yaitu:
Kontainer Docker Linux
GNU/Linux Debian, Ubuntu, dan turunannya
Fedora Linux (ini juga berlaku untuk Red Hat Enterprise Linux dan distribusi yang kompatibel, seperti Rocky Linux)
FreeBSD
Tidak mungkin memberikan instruksi rinci untuk setiap sistem operasi yang ada, tetapi konsep-konsep yang disajikan dalam bagian berikut seharusnya memberikan wawasan yang berguna terlepas dari sistem operasi yang digunakan.
Sebelum masuk ke instalasi praktis, perlu dicatat bahwa paket biner dapat hadir dalam dua varian: yang disediakan oleh vendor sistem operasi, dan yang disediakan oleh PGDG. Biasanya, pada sistem berbasis Linux, Anda harus menggunakan paket biner yang disediakan oleh PGDG, karena mereka adalah sumber paling otoritatif untuk PostgreSQL. Faktanya, paket yang disediakan oleh vendor sistem operasi cenderung cepat ketinggalan zaman, yang berarti mereka biasanya tertinggal beberapa versi dari versi terbaru yang tersedia secara global. Di sisi lain, pada platform BSD seperti FreeBSD, OpenBSD, dan NetBSD, porter sistem operasi melakukan pekerjaan luar biasa dalam menjaga paket yang disediakan oleh sistem operasi itu sendiri tetap sangat mutakhir, sehingga Anda dapat dengan aman dan mudah menggunakan paket sistem operasi.
Hal penting yang perlu diperhatikan adalah bahwa sistem operasi yang berbeda menyimpan file di tempat yang berbeda: biasanya, semua file konfigurasi ditempatkan dalam PGDATA itu sendiri, tetapi paket dari beberapa sistem operasi menyebarkan file konfigurasi di bawah direktori /etc. Beberapa sistem operasi juga menempatkan executable di jalur spesifik, dipisahkan oleh versi PostgreSQL, sementara yang lain menempatkan semua executable di jalur yang sama. Anda perlu menyelidiki dengan penyedia paket sistem operasi di mana setiap file atau direktori ditempatkan untuk dapat mengkonfigurasi dan menggunakan PostgreSQL.
Menggunakan Image Docker Buku Ini
Kami memisahkan setiap image Docker berdasarkan bab yang dirujuk oleh image tersebut. Ada image umum yang disebut standalone yang dapat digunakan sebagai basis umum dan akan digunakan pada bab-bab awal. Bab lain, misalnya, yang membahas replikasi, memerlukan image sendiri untuk dieksekusi.
Untuk memulai image standalone dasar, Anda cukup menjalankan skrip shell run-pg-docker.sh, sebagai berikut:
Skrip akan meminta kata sandi; diperlukan bahwa pengguna Anda memiliki kemampuan sudo untuk menghubungkan jaringan dan port Docker. Semua kontainer akan meluncurkan sesi GNU Bash dengan pengguna sistem operasi postgres.
Saat pertama kali setiap kontainer dimulai, akan membutuhkan waktu karena perlu menarik image PostgreSQL dari jaringan, menginstal paket yang diperlukan, dan mengkonfigurasi image. Akhirnya, sistem akan membawa Anda ke prompt Bash; Anda sekarang masuk melalui kontainer sebagai pengguna postgres dan dapat mulai berinteraksi dengan sistem mengikuti contoh-contoh dalam buku ini. Dalam setiap kontainer, direktori PGDATA diatur ke /postgres/16/data.
Setelah Anda keluar dari shell kontainer, kontainer akan berhenti, dan tidak ada lagi proses terkait PostgreSQL yang akan aktif.
Untuk memulai image spesifik per bab, Anda dapat menggunakan skrip yang sama, menentukan folder bab sebagai argumen—misalnya:
Setiap kontainer akan dimulai dengan instansi PostgreSQL yang sudah diisi sebelumnya, sehingga Anda dapat dengan mudah mengikuti contoh kode di setiap bab.
Catatan: Mungkin ada beberapa perbedaan dalam output yang Anda lihat dalam contoh kode dan output yang Anda dapatkan dari menjalankan perintah yang sama dalam kontainer Docker. Misalnya, nilai yang dihasilkan secara otomatis dan penghitungan tupel bisa berbeda, serta cap waktu dan tanggal. Selain itu, setiap kontainer Docker akan menyimpan data di direktori disk terpisah, sehingga jika Anda memanipulasi isi instansi PostgreSQL yang dikontainerisasi, saat Anda memulai ulang kontainer, perubahan Anda akan tetap ada.
Menginstal PostgreSQL pada GNU/Linux Debian, Ubuntu, dan Turunannya
PGDG menyediakan paket biner untuk Debian dan turunannya, termasuk keluarga sistem operasi Ubuntu. Untuk menggunakan repositori PGDG, Anda perlu menginstal sumber dan tanda tangan repositori terlebih dahulu:
Ini akan memastikan sumber repositori untuk sistem operasi Anda mutakhir sehingga Anda dapat menginstal paket PostgreSQL:
Debian dan Ubuntu menyediakan perintah sendiri untuk mengontrol klaster, pg_ctlcluster(1). Alasannya adalah bahwa pada sistem operasi Debian/Ubuntu, setiap versi PostgreSQL diinstal di direktori sendiri dengan file konfigurasi terpisah, sehingga ada cara untuk menjalankan versi yang berbeda secara bersamaan dan mengelolanya melalui sistem operasi. Misalnya, file konfigurasi berada di bawah direktori /etc/postgresql/16/main, sedangkan direktori data diatur secara default ke /var/lib/postgresql/16/main.
Jika Anda ingin mengaktifkan PostgreSQL saat boot, Anda perlu menjalankan perintah berikut:
Untuk memulai klaster Anda, Anda dapat menggunakan perintah service(1) sebagai berikut:
Dengan demikian, Anda telah menginstal PostgreSQL pada GNU/Linux Debian, Ubuntu, dan turunannya.
Menginstal PostgreSQL pada Fedora Linux
Paket PostgreSQL Fedora Linux disediakan oleh komunitas PostgreSQL. Untuk memungkinkan dnf(8) menemukan paket PostgreSQL, Anda perlu menginstal repositori PGDG, dan kemudian melanjutkan dengan instalasi sebagai paket distribusi:
Daftar repositori yang tersedia dapat diperoleh dari situs web resmi PostgreSQL pada halaman unduhan (lihat bagian Referensi).
Paket dinamai dengan postfix nomor versi. Anda dapat menginstal paket PostgreSQL menggunakan perintah berikut:
Kemudian Anda perlu mengkonfigurasi sistem, menentukan direktori PGDATA dan mengaktifkan opsi untuk memulai layanan saat boot. Untuk menentukan direktori PGDATA, Anda perlu menggunakan systemd(1) untuk mengedit file konfigurasi pengganti untuk layanan postgresql-16:
Perintah di atas akan membuka editor teks default Anda dengan file kosong; Anda dapat, oleh karena itu, mengatur variabel PGDATA sebagai berikut dan kemudian menyimpan serta keluar dari editor untuk menerapkan perubahan:
Terakhir, saatnya untuk menginisialisasi direktori basis data; ini dapat dilakukan dengan perintah instalasi spesifik Fedora bernama postgresql-16-setup, sebagai berikut:
Untuk mengaktifkan PostgreSQL agar mulai saat boot dan meluncurkan server segera, Anda dapat menjalankan perintah berikut:
Jika instalasi Fedora Anda berisi perintah service(8), Anda juga dapat memulai layanan dengan:
Menginstal PostgreSQL pada FreeBSD
PostgreSQL tersedia di FreeBSD melalui port dan paket. Berkat perintah pkg(1), sangat mudah untuk menginstal PostgreSQL. Pertama-tama, perbarui daftar paket, dan cari paket PostgreSQL yang dinamai dengan versi utama sebagai postfix:
Anda kemudian dapat menginstal paket dengan menjalankan pkg(1) dan menentukan set paket yang Anda butuhkan. Tentu saja, instalasi harus dijalankan sebagai pengguna dengan hak administratif, sebagai berikut:
Untuk memulai klaster, Anda perlu menginisialisasi direktori untuk melayani basis data dan mengaktifkan startup server saat mesin boot. Parameter minimal yang perlu diatur adalah postgresql_enable dan postgresql_data.
Misalnya, untuk mengedit (sebagai pengguna administratif) file /etcYB rc.conf, tambahkan opsi sebagai berikut:
Sekarang Anda dapat menginisialisasi direktori data dengan perintah berikut:
Sekarang setelah semuanya sudah siap, Anda dapat memulai instansi PostgreSQL dengan perintah berikut:
Menginstal PostgreSQL dari Sumber
Menginstal PostgreSQL dari sumber memerlukan pengunduhan tarball, yaitu paket terkompresi dengan semua file kode sumber, dan memulai kompilasi. Biasanya, ini memakan waktu beberapa menit, tergantung pada kekuatan mesin dan bandwidth I/O. Untuk mengkompilasi PostgreSQL dari sumber, Anda akan memerlukan berbagai alat dan pustaka, terutama kompiler C yang sesuai dengan standar C99 (atau lebih tinggi). Biasanya, Anda sudah memiliki alat-alat ini pada sistem Linux atau Unix; jika tidak, silakan merujuk ke dokumentasi sistem operasi Anda tentang cara menginstal alat-alat ini.
Setelah Anda memiliki semua dependensi yang diinstal, ikuti langkah-langkah yang diberikan di sini untuk mengkompilasi dan menginstal PostgreSQL:
Langkah pertama adalah mengunduh tarball PostgreSQL terkait dengan versi yang ingin Anda instal, memverifikasi bahwa itu benar. Misalnya, untuk mengunduh versi 16.0, Anda dapat melakukan:
Sebelum memulai kompilasi, periksa bahwa tarball yang diunduh tidak rusak:
Setelah Anda yakin bahwa tarball yang diunduh tidak korup, Anda dapat mengekstrak isinya dan memulai kompilasi (harap pertimbangkan bahwa arsip yang diekstrak akan memakan sekitar 200 MB ruang disk, dan kompilasi akan memakan ruang tambahan):
Jika Anda ingin atau memerlukan file layanan systemd(1), tambahkan opsi --with-systemd ke baris configure.
Setelah basis data diinstal, Anda perlu membuat pengguna untuk menjalankan basis data, biasanya dinamai postgres, dan menginisialisasi direktori basis data:
Menginstal PostgreSQL melalui pgenv
pgenv adalah alat kecil yang memungkinkan Anda mengunduh dan mengelola beberapa instansi dari versi PostgreSQL yang berbeda pada mesin yang sama. Ide di balik pgenv adalah untuk memungkinkan Anda menjelajahi versi PostgreSQL yang berbeda—misalnya, untuk menguji aplikasi Anda terhadap versi utama yang berbeda. pgenv tidak bertujuan menjadi alat kelas enterprise untuk mengelola instansi produksi; sebaliknya, ini adalah alat untuk memungkinkan pengembang dan DBA bereksperimen dengan versi PostgreSQL yang berbeda dan mengendalikannya dengan mudah.
Tentu saja, sebagai alat eksternal, pgenv harus diinstal sebelum dapat digunakan. Namun, instalasinya sangat sederhana, karena aplikasi ini terdiri dari satu skrip Bash.
Cara tercepat untuk menginstal pgenv adalah dengan mengkloning repositori GitHub dan mengatur variabel lingkungan PATH untuk menunjuk ke direktori executable, sebagai berikut:
Sekarang, perintah pgenv sudah tersedia, dan Anda dapat menjalankan perintah untuk mendapatkan prompt bantuan dan melihat perintah yang tersedia.
Ide di balik pgenv sangat sederhana: ini adalah alat untuk mengotomatiskan hal-hal “membosankan”—yaitu, mengunduh, mengkompilasi, menginstal, dan memulai/menghentikan klaster. Untuk membiarkan pgenv mengelola instansi tertentu, Anda harus “menggunakannya”. Ketika Anda menggunakan instansi, pgenv mendeteksi apakah instansi telah diinisialisasi atau belum, dan dalam kasus terakhir, ia melakukan inisialisasi untuk Anda.
Untuk menginstal versi 16.0 dan 15.1 dari PostgreSQL, Anda hanya perlu menjalankan perintah berikut:
Perintah di atas akan mengunduh dan mengkompilasi kedua versi PostgreSQL, dan waktu yang diperlukan untuk menyelesaikan operasi tergantung pada kekuatan dan kecepatan mesin yang Anda gunakan. Setelah itu, Anda dapat memutuskan instansi mana yang akan dimulai dengan perintah use:
pgenv cukup cerdas untuk melihat apakah instansi yang Anda mulai sudah diinisialisasi, atau ia akan menginisialisasinya (hanya pada kali pertama) untuk Anda.
Jika Anda perlu menghentikan dan mengubah versi PostgreSQL yang digunakan, Anda dapat mengeluarkan perintah stop diikuti oleh perintah use dengan versi yang ditargetkan. Misalnya, untuk menghentikan instansi 16.0 dan memulai instansi 15.1, Anda dapat menggunakan:
Alat pgenv menyediakan banyak perintah lain untuk mendapatkan informasi tentang versi PostgreSQL mana yang diinstal, apa yang sedang dieksekusi (jika ada), dan sebagainya.
Jika Anda mencari cara cepat untuk menguji dan menjalankan versi PostgreSQL yang berbeda pada mesin yang sama, pgenv adalah alat yang bagus.
Bab ini telah memperkenalkan Anda pada PostgreSQL, proyeknya, dan fitur-fitur utamanya. Anda telah belajar tentang terminologi PostgreSQL, serta cara menginstal klaster pada sistem operasi Unix-like, termasuk dalam kontainer, serta menginstal klaster dari berbagai sumber.
Setelah menginstal PostgreSQL dan mempelajari terminologinya, Anda dapat melanjutkan ke bab-bab berikutnya, di mana Anda akan belajar cara menggunakan, menghubungkan, dan menyimpan data dalam basis data.
Catatan tentang Daftar Email PostgreSQL: Proyek PostgreSQL memiliki daftar email yang sangat kaya dan ekstensif, mulai dari topik umum hingga detail yang sangat spesifik. Merupakan kebiasaan yang baik untuk mencari masalah dan solusi di arsip daftar email; lihat halaman web di untuk informasi lebih lanjut.
Docker adalah kontainer yang memungkinkan Anda menjalankan sekumpulan proses yang terisolasi seolah-olah mereka adalah bagian dari mesin virtual mikro. PGDG menyediakan image Docker yang dapat Anda gunakan untuk menjalankan klaster yang dikontainerisasi. Menjelaskan teknologi Docker berada di luar cakupan buku ini, dan untuk memungkinkan Anda bereksperimen dengan cara yang cepat dan mudah dengan PostgreSQL, kami telah menyediakan serangkaian image Docker, berdasarkan image PostgreSQL, yang disesuaikan untuk memungkinkan Anda bereksperimen dengan konsep-konsep yang dijelaskan dalam buku ini. Anda dapat menggunakan image-image tersebut sebagai titik awal untuk proyek Anda sendiri, meskipun image-image tersebut tidak dimaksudkan untuk digunakan dalam lingkungan produksi. Image-image tersebut terkandung dalam direktori docker_images dari repositori kode buku ().
Catatan rilis PostgreSQL:
Dokumentasi peningkatan:
Kebijakan versi PostgreSQL:
Dokumentasi resmi initdb PostgreSQL:
Dokumentasi resmi pg_ctl PostgreSQL:
Repositori dan dokumentasi pgenv GitHub: