PostgreSQL → Introduction
Sumber: Luca Ferrari, Enrico Pirozzi - Learn PostgreSQL Use, manage, and build secure and scalable databases with PostgreSQL 16 (2023) - Chapter 1
PostgreSQL adalah database relasional open-source yang terkenal, dengan motto yang menyatakan bahwa proyek ini bertujuan menjadi database open-source paling canggih di dunia (the most advanced open-source database in the world). Kualitas utama yang menarik banyak pengguna baru setiap tahun dan membuat pengguna lama tetap antusias terhadap PostgreSQL adalah karena stabilitas, skalabilitas, keamanan, dan fitur-fitur nya.
Meskipun PostgreSQL adalah database relasional, ekosistemnya telah berkembang seiring waktu, menyediakan platform yang mempunyai banyak ekstensi, alat, dan bahasa pemrograman yang terhubung melalui komunitas di seluruh dunia. PostgreSQL adalah proyek open-source yang sepenuhnya dikembangkan di dunia open-source. Artinya, tidak ada entitas tunggal yang mengendalikan proyek, dan PostgreSQL bukanlah produk komersial. Dengan kata lain, PostgreSQL milik semua orang, dan siapa pun dapat berkontribusi. Berkat lisensi 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 membutuhkan pengalaman dalam pengembangan perangkat lunak, konsep database, serta sikap positif terhadap kolaborasi open-source. Karena sifatnya yang open-source, PostgreSQL akan terus hidup hampir selamanya tanpa risiko perusahaan tunggal bangkrut dan menyeret database ini bersama mereka.
Pengembang resmi PostgreSQL dikenal sebagai PostgreSQL Global Development Group (PGDG). Mereka adalah pengembang yang, setelah diskusi dan koordinasi, mengimplementasikan fitur-fitur utama dan menghasilkan rilis baru. PGDG merilis versi produksi baru setiap tahun, biasanya pada kuartal terakhir.
Pada saat buku ini ditulis, PostgreSQL 16 adalah rilis produksi terbaru dari database ini, Buku 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 / disaster). Buku ini mencakup PostgreSQL 16, tetapi konsep yang dijelaskan juga dapat diterapkan pada versi yang lebih baru (serta versi sebelumnya di mana fitur yang sama ada). Meskipun beberapa alat mungkin berubah di rilis mendatang (misalnya, menambah atau menghapus opsi tertentu), konsep dasar yang dijelaskan dalam buku ini akan tetap sama terlepas dari versi PostgreSQL.
Bab ini akan memperkenalkan Anda pada database 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 error utama jika diperlukan. Terakhir, Anda akan melihat cara menginstal PostgreSQL dengan berbagai cara sehingga Anda akan mendapatkan pengetahuan dasar tentang cara menginstalnya di berbagai platform dan konteks.
Berikut adalah topik yang dibahas dalam bab ini:
Sekilas tentang PostgreSQL
Menjelajahi terminologi PostgreSQL
Menginstal PostgreSQL 16 atau lebih tinggi
Persyaratan Teknis
Anda dapat menemukan kode untuk bab ini di repositori GitHub berikut: https://github.com/PacktPublishing/Learn-PostgreSQL-Second-Edition.
Sekilas tentang PostgreSQL
Sebagai database relasional, PostgreSQL menyediakan banyak fitur. Satu instance saja dapat menampung lebih dari 4 miliar database individual, masing-masing dengan ukuran total tak terbatas dan kapasitas untuk lebih dari 1 miliar tabel, masing-masing berisi 32 TB data. Selain itu, jika Anda khawatir batas atas ini tidak cukup, pertimbangkan bahwa satu tabel dapat memiliki 1.600 kolom, masing-masing berukuran 1 GB, dengan jumlah indeks multi-kolom yang tidak terbatas (hingga 32 kolom). Singkatnya, PostgreSQL dapat menyimpan lebih banyak data daripada yang mungkin Anda pikirkan!
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 database besar tertentu, Anda perlu memahami PostgreSQL dan fitur-fiturnya, sehingga dapat mengatur dan mengelola dataset Anda dengan baik.
PostgreSQL sepenuhnya mematuhi prinsip ACID dan memiliki dasar 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 before dan after, view, materialized view, tabel terpartisi, foreign data wrapper, multiple schema, generated column, dan sebagainya. Semua konsep ini akan dijelaskan pada bab-bab berikutnya.
Penjelasan ACID: ACID adalah akronim dari sifat-sifat yang menunjukkan bahwa mesin database menyediakan atomicity, consistency, isolation, dan durability. Atomicity berarti operasi database yang kompleks diproses sebagai satu instruksi meskipun terdiri dari beberapa operasi. Consistency berarti data dalam database selalu konsisten dan tidak rusak akibat operasi yang dilakukan sebagian. Isolation memungkinkan database menangani konkurensi dengan cara yang benar, yaitu tanpa data yang rusak akibat perubahan yang tumpang tindih. Terakhir, durability berarti mesin database harus melindungi data yang dikandungnya, bahkan dalam kasus kegagalan perangkat lunak atau perangkat keras, sebaik mungkin.
PostgreSQL dapat diperluas dengan bahasa tertanam lain, seperti Perl, Python, Java, dan bahkan Bash! Jika Anda merasa database tidak menyediakan cukup fitur, Anda dapat memasang ekstensi untuk mendapatkan perilaku dan peningkatan yang berbeda, misalnya, Geospatial Information System (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, Anda akan dapat memanfaatkan dokumentasi online dari utilitas tersebut untuk memaksimalkannya.
PostgreSQL berjalan di hampir semua sistem operasi, termasuk Linux, Unix, macOS, dan Microsoft Windows, serta dapat berjalan pada perangkat keras sederhana seperti papan Raspberry Pi. Banyak penyedia layanan cloud computing juga mencantumkan PostgreSQL dalam katalog perangkat lunak mereka. Berkat mekanisme tuning yang ekstensif, PostgreSQL dapat diadaptasi dengan baik ke platform yang menghostingnya.
Komunitas bertanggung jawab untuk menjaga kualitas database dan dokumentasi pada tingkat yang sangat tinggi. Selain itu, mailing list dan saluran IRC sangat responsif dan merupakan sumber berharga untuk solusi masalah dan ide-ide baru. Dalam pengalaman penulis, belum pernah ada kasus di mana PostgreSQL tidak dapat beradaptasi dengan skenario aplikasi apa pun.
Catatan tentang mailing list: Proyek PostgreSQL memiliki serangkaian mailing list yang sangat kaya dan ekstensif, mulai dari topik umum hingga detail yang sangat spesifik. Merujuk ke arsip mailing list untuk mencari masalah dan solusi adalah kebiasaan yang baik; lihat halaman web di https://www.postgresql.org/list/ untuk informasi lebih lanjut.
Sejarah Singkat PostgreSQL
Nama PostgreSQL berasal dari leluhurnya: Ingres. Ingres adalah database relasional yang dikembangkan oleh Profesor Michael Stonebraker. Pada tahun 1986, Stonebraker memulai proyek pasca-Ingres untuk mengembangkan fitur baru yang menarik di dunia database dan menamakan proyek ini POSTGRES (POST-Ingres). Proyek ini bertujuan mengembangkan database relasional berbasis objek, di mana "objek" berarti pengguna dapat memperluas database dengan objek mereka sendiri, seperti tipe data, fungsi, dan sebagainya.
Pada tahun 1994, POSTGRES dirilis dengan versi 4.2 dan lisensi MIT, yang membuka kolaborasi dengan pengembang lain di seluruh dunia. Saat itu, POSTGRES menggunakan bahasa kueri internal bernama QUEL. Dua mahasiswa Berkeley, Andrew Yu dan Jolly Chen, mengganti bahasa kueri QUEL dengan SQL yang modern dan inovatif. Fitur ini begitu revolusioner sehingga proyek ini mengubah namanya menjadi Postgres95 untuk menekankan perbedaan dari 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 itu, proyek ini terus dijaga dengan baik dan diperbarui. Ini juga berarti PostgreSQL telah dikembangkan selama hampir 30 tahun, yang menegaskan soliditas dan keterbukaan proyek ini. Jika Anda penasaran, Anda juga dapat menelusuri kode sumber hingga ke commit awal di dunia open-source:
$ git log 'git rev-list --max-parents=0 HEAD'
commit d31084e9d1118b25fd16580d9d8c2924b5740dff
Author: Marc G. Fournier <scrappy@hub.org>
Date: Tue Jul 9 06:22:35 1996 +0000
Postgres95 1.01 Distribution - Virgin Sources
Apa yang Baru di PostgreSQL 16?
PostgreSQL 16 dirilis pada 14 September 2023. Rilis ini mencakup sejumlah peningkatan, termasuk:
Beberapa optimasi performa, mulai dari alokasi dan manajemen memori internal hingga perilaku yang lebih paralel secara default.
Revisi izin untuk pengguna dan grup, termasuk grup sistem baru untuk memberikan kemampuan spesifik.
Mekanisme konfigurasi yang ditingkatkan untuk memudahkan penyertaan file dan mencocokkan pengguna serta host menggunakan ekspresi reguler.
Kumpulan fungsi JSON yang lebih lengkap.
Mesin replikasi logis yang ditingkatkan yang memungkinkan decoding bahkan pada server standby.
Sejumlah kolom utilitas mendapatkan opsi baru untuk menyesuaikan kebutuhan administrator.
Seperti rilis lainnya, PostgreSQL 16 juga berisi perubahan yang bertujuan mempermudah hidup Database Administrator (DBA), misalnya, menghapus opsi yang bertentangan dan istilah serta tipe SQL yang usang. Ini menegaskan bahwa pengembang PostgreSQL selalu memperhatikan database dan kepatuhannya terhadap standar SQL saat ini.
Kebijakan Rilis, Nomor Versi, dan Siklus Hidup PostgreSQL
Pengembang PostgreSQL merilis versi mayor baru setiap tahun, biasanya sekitar bulan Oktober. Versi mayor adalah versi stabil yang memperkenalkan fitur baru dan kemungkinan ketidakcocokan dengan versi sebelumnya. Selama siklus hidupnya, versi mayor terus ditingkatkan melalui rilis minor, yang biasanya berfokus pada perbaikan bug dan pemeliharaan.
Nomor versi PostgreSQL mengidentifikasi rilis mayor dan minor. Nomor versi ditulis sebagai mayor.minor; misalnya, 16.0 menunjukkan rilis mayor pertama, 16, sedangkan 16.1 menunjukkan rilis minor, 1, dari rilis mayor 16. Semakin besar angkanya, semakin baru versi yang Anda kelola.
Versi mayor 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 mayor. Ini berarti, meskipun Anda dapat meningkatkan PostgreSQL antar versi minor dengan cepat, Anda mungkin perlu melakukan dump dan restore konten database antar peningkatan versi mayor.
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 bug bisa terjadi. Meskipun ada bug internal, rilis baru juga mencakup perbaikan untuk eksploitasi keamanan dan peningkatan performa, jadi sangat disarankan untuk selalu memperbarui server PostgreSQL Anda.
Terakhir, tidak semua versi PostgreSQL akan hidup selamanya. PostgreSQL menyediakan dukungan dan peningkatan selama lima tahun setelah rilis baru diterbitkan. Setelah periode ini, versi mayor akan mencapai End Of Life (EOL) dan pengembang PostgreSQL tidak lagi memeliharanya. Ini tidak berarti Anda tidak dapat menjalankan versi kuno PostgreSQL; 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. Ingatlah bahwa menjalankan rilis EOL bukan hanya soal tidak mendapatkan pembaruan, patch keamanan, dan perbaikan bug; Anda akan sendirian dan tidak akan menemukan bantuan saat menghadapi masalah.
Menjelajahi Terminologi PostgreSQL
Untuk memahami cara kerja PostgreSQL dan mengikuti contoh dalam bab-bab buku ini, kita perlu memperkenalkan terminologi yang digunakan dalam PostgreSQL dan komunitas penggunanya.
PostgreSQL adalah layanan (service), yang berarti berjalan sebagai daemon pada sistem operasi. Daemon PostgreSQL yang berjalan disebut instance. Instance PostgreSQL sering disebut cluster karena satu instance dapat melayani dan menangani beberapa database. Setiap database adalah ruang terisolasi tempat pengguna dan aplikasi dapat menyimpan data.
Database diakses oleh pengguna yang diizinkan, tetapi pengguna yang terhubung ke satu database tidak dapat melintasi batas database dan berinteraksi dengan data di database lain kecuali mereka secara eksplisit terhubung ke database tersebut juga.
Database dapat diorganisasi ke dalam namespace yang disebut schema. Schema adalah nama mnemonik yang dapat diberikan pengguna untuk mengatur objek database, seperti tabel, ke dalam koleksi yang lebih terstruktur. Schema tidak dapat bersarang, sehingga mereka mewakili namespace datar.
Objek database diwakili oleh segala sesuatu yang dapat dibuat dan dikelola pengguna dalam database, misalnya, tabel, fungsi, trigger, dan tipe data. Setiap objek hanya dimiliki oleh satu schema yang, jika tidak ditentukan, dinamakan sesuai pengguna yang membuat objek tersebut.
Catatan tentang schema default: Pada versi PostgreSQL sebelum 15, setiap objek baru dimiliki oleh public schemasecara default jika tidak ditentukan lain. Sejak PostgreSQL 15, setiap pengguna diberikan schema pribadi, dan objek dimiliki oleh schema tersebut kecuali nama schema lain ditentukan secara eksplisit.
Pengguna didefinisikan pada tingkat klaster, yang berarti mereka tidak terikat pada database tertentu dalam klaster. Seorang pengguna dapat terhubung dan mengelola database apa pun dalam klaster yang diizinkan untuk mereka.
PostgreSQL membagi pengguna menjadi dua kategori utama:
Pengguna biasa: Pengguna ini dapat terhubung dan menangani database serta objek tergantung pada set izin mereka.
Superuser: Pengguna ini dapat melakukan apa saja dengan objek database apa pun.
PostgreSQL memungkinkan konfigurasi superuser sebanyak yang Anda butuhkan, dan setiap superuser memiliki izin yang sama: mereka dapat melakukan segala sesuatu dengan setiap database dan objek, serta dapat mengontrol siklus hidup klaster (misalnya, mengakhiri koneksi pengguna biasa, memuat ulang konfigurasi, menghentikan seluruh klaster, dll.).
Data internal PostgreSQL, seperti pengguna, database, namespace, konfigurasi, dan status runtime database, disediakan melalui catalog: tabel dan view khusus yang menyajikan informasi secara interaktif melalui SQL. Banyak catalog dipangkas tergantung pada pengguna yang memeriksanya, kecuali superuser biasanya melihat seluruh informasi yang tersedia.
PostgreSQL menyimpan data pengguna (misalnya, tabel) dan status internalnya di filesystem lokal. Ini adalah poin penting untuk diingat: PostgreSQL bergantung pada filesystem yang mendasarinya untuk menerapkan persistensi, sehingga menyetel filesystem adalah tugas penting untuk membuat PostgreSQL bekerja dengan baik. Secara khusus, PostgreSQL menyimpan semua kontennya (data pengguna dan status internal) dalam satu direktori filesystem yang dikenal sebagai PGDATA. Direktori PGDATA mewakili apa yang disajikan klaster sebagai database, sehingga Anda dapat memiliki satu instalasi PostgreSQL dan membuatnya beralih ke direktori PGDATA yang berbeda untuk menyajikan konten yang berbeda. Seperti yang akan Anda lihat di bagian berikutnya, direktori PGDATA perlu diinisialisasi sebelum dapat digunakan oleh PostgreSQL; inisialisasi adalah pembuatan struktur direktori dalam PGDATA itu sendiri dan merupakan operasi satu kali.
Isi detail PGDATA akan dijelaskan pada bab berikutnya, tetapi untuk saat ini, cukup ingat bahwa direktori PGDATA adalah tempat PostgreSQL mengharapkan untuk 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 ini, klaster tidak dapat menjamin konsistensi data dan, dalam beberapa keadaan kritis, bahkan tidak dapat mulai.
WAL adalah teknologi yang digunakan banyak sistem database, dan ide dasar cara kerjanya mirip dengan teknologi lain seperti filesystem transaksional (seperti ZFS, UFS dengan Soft Updates, dll.). Idenya adalah, sebelum menerapkan perubahan apa pun pada bagian data, log intensi akan dibuat secara permanen. Dalam kasus ini, jika klaster crash, klaster dapat selalu mengandalkan log intensi yang sudah ditulis untuk memahami operasi mana yang telah selesai dan apa yang harus dipulihkan (detail lebih lanjut di bab berikutnya). Perhatikan bahwa istilah "crash" merujuk pada bencana apa pun yang dapat menimpa klaster Anda, termasuk bug perangkat lunak, tetapi lebih mungkin karena kekurangan daya listrik, kegagalan hard disk, dan sebagainya. PostgreSQL berkomitmen untuk memberikan konsistensi data terbaik yang mungkin, dan oleh karena itu, ia berusaha keras untuk memastikan bahwa log intensi (WAL) seaman mungkin.
Secara internal, PostgreSQL melacak struktur tabel, indeks, fungsi, dan semua hal yang diperlukan untuk mengelola klaster dalam penyimpanan khususnya, yaitu catalog.
Catatan tentang information schema: Standar SQL mendefinisikan apa yang disebut information schema, yaitu koleksi tabel yang umum untuk semua implementasi database standar, termasuk PostgreSQL, yang dapat digunakan oleh DBA untuk memeriksa status internal database itu sendiri. Misalnya, information schema mendefinisikan tabel yang mengumpulkan informasi tentang semua tabel yang didefinisikan pengguna sehingga memungkinkan untuk mengkueri information schema untuk melihat apakah tabel tertentu ada atau tidak. Catalog PostgreSQL bisa disebut sebagai "information schema yang ditingkatkan": catalog jauh lebih akurat dan spesifik untuk PostgreSQL, dan DBA dapat mengekstrak lebih banyak informasi tentang status PostgreSQL dari catalog. Tentu saja, PostgreSQL mendukung information schema, tetapi sepanjang buku ini, Anda akan melihat referensi ke catalog karena mereka menyediakan informasi yang jauh lebih rinci.
Ketika klaster dimulai, PostgreSQL meluncurkan satu proses yang disebut postmaster. Tujuan postmaster adalah untuk mem-bootstrap instance, menelurkan proses yang diperlukan untuk mengelola aktivitas database, dan kemudian menunggu koneksi yang masuk. Koneksi pengguna, sering kali dilakukan melalui koneksi TCP/IP, mengharuskan postmaster untuk mem-fork proses lain yang disebut backend process, yang bertugas melayani satu dan hanya satu koneksi.
Ini berarti setiap kali koneksi baru terhadap klaster dibuka, klaster bereaksi dengan meluncurkan backend process baru untuk melayaninya hingga koneksi berakhir dan proses tersebut dihancurkan. Postmaster biasanya juga memulai beberapa proses utilitas yang bertanggung jawab untuk menjaga PostgreSQL tetap sehat selama berjalan; proses-proses ini akan dibahas lebih lanjut di bab ini dan bab berikutnya.
Untuk meringkas, PostgreSQL menyediakan executable yang dapat diinstal di mana saja di 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, catalog, dan WAL. Setiap kali klien terhubung ke server, proses postmaster mem-fork backend process baru yang bertugas melayani koneksi tersebut.
Berikut adalah rekap singkat dari istilah paling kompleks yang digunakan dalam PostgreSQL:
Cluster: Seluruh layanan PostgreSQL.
Postmaster: Proses pertama yang dijalankan klaster, bertanggung jawab untuk melacak aktivitas seluruh klaster. Postmaster menelurkan backend process setiap kali koneksi baru dibuat.
Database: Kontainer data terisolasi tempat pengguna (atau aplikasi) dapat terhubung. Klaster dapat menangani beberapa database. Database dapat terdiri dari berbagai objek, termasuk schema (namespace), tabel, trigger, dan objek lain yang akan Anda pelajari seiring berjalannya buku.
PGDATA: Direktori pada penyimpanan persisten yang sepenuhnya didedikasikan untuk PostgreSQL dan datanya. PostgreSQL menyimpan data dalam direktori tersebut.
WAL: Log intensi perubahan database, digunakan untuk memulihkan data dari crash kritis.
Sekarang setelah kita membahas terminologi dasar terkait PostgreSQL, saatnya untuk menginstalnya di mesin Anda.
Menginstal PostgreSQL
PostgreSQL dapat berjalan di beberapa sistem operasi, terutama sistem Unix dan Unix-like, termasuk Linux, serta Microsoft Windows 11 atau lebih tinggi. Hingga saat 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 teruji. Namun, penyebaran di platform lain yang didukung tidak akan 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 bisa 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 menjalankan PostgreSQL:
Mengkompilasi dari source code.
Menggunakan paket biner.
Paket biner disediakan oleh komunitas PostgreSQL atau sistem operasi, dan penggunaannya memiliki keuntungan bahwa instalasi PostgreSQL dapat berjalan dengan lancar. Selain itu, paket biner tidak memerlukan toolchain kompilasi sehingga lebih mudah diadopsi. Terakhir, paket biner mematuhi konvensi sistem operasi tempat mereka dibuat (misalnya, di mana menempatkan file konfigurasi), dan peningkatan dapat dikelola oleh sistem operasi juga. Karena paket biner perlu dibuat sebelumnya oleh vendor, mereka mungkin tidak mencerminkan versi rilis terbaru. Misalnya, ketika PGDG merilis pembaruan minor baru, sistem operasi memerlukan beberapa hari untuk mendorong paket biner dengan pembaruan tersebut untuk semua platform yang didukung.
Di sisi lain, menginstal dari source code memerlukan toolchain kompilasi, serta lebih banyak waktu dan konsumsi CPU untuk membangun executable PostgreSQL. Anda memiliki kendali penuh atas komponen mana yang akan tersedia di produk akhir dan dapat memangkas serta mengoptimalkan instance 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 dibagi menjadi beberapa komponen untuk diinstal:
PostgreSQL server: Bagian yang dapat melayani database Anda ke aplikasi dan pengguna, diperlukan untuk menyimpan data Anda.
PostgreSQL client: Pustaka dan alat klien untuk terhubung ke server database. Tidak diperlukan jika Anda tidak perlu terhubung ke database di mesin yang sama, tetapi diperlukan pada mesin klien.
PostgreSQL contrib package: 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.
PostgreSQL docs: Dokumentasi (misalnya, man page) terkait server dan klien.
PostgreSQL PL/Perl, PL/Python, dan PL/Tcl: Tiga komponen untuk memungkinkan penggunaan bahasa pemrograman—Perl, Python, dan Tcl—langsung dalam server PostgreSQL.
Kumpulan 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 yang dijelaskan dalam buku ini, kami menyarankan pembaca mencoba contoh kode sendiri; oleh karena itu, Anda akan memerlukan instance PostgreSQL yang tersedia. Meskipun pilihan terbaik untuk mendapatkan instance PostgreSQL lengkap adalah menginstalnya pada mesin virtual atau komputer fisik, kami juga telah menyediakan serangkaian image Docker sebagai instance PostgreSQL yang terkandung dalam container 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 di beberapa sistem, dan oleh karena itu, bagian ini bertujuan untuk menunjukkan cara melakukan instalasi lengkap dari awal pada beberapa sistem operasi Unix-like.
Pada bagian berikut, Anda akan melihat cara menginstal PostgreSQL pada beberapa sistem operasi Linux dan Unix yang populer, yaitu:
Kontainer Docker Linux
GNU/Linux Debian, Ubuntu, dan turunannya
Fedora Linux (juga berlaku untuk Red Hat Enterprise Linux dan distribusi yang kompatibel, seperti Rocky Linux)
FreeBSD
Tidak mungkin memberikan instruksi terperinci untuk setiap sistem operasi, tetapi konsep yang disajikan pada 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 jenis: yang disediakan oleh vendor sistem operasi dan yang disediakan oleh PGDG. Biasanya, pada sistem berbasis Linux, Anda sebaiknya 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 beberapa versi di belakang versi terbaru yang tersedia secara global. Di sisi lain, pada platform BSD seperti FreeBSD, OpenBSD, dan NetBSD, porter sistem operasi melakukan pekerjaan luar biasa untuk menjaga paket yang disediakan oleh sistem operasi itu sendiri tetap 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
Docker adalah container yang memungkinkan Anda menjalankan serangkaian proses terisolasi seolah-olah mereka adalah bagian dari mesin virtual mikro. PGDG menyediakan image Docker yang dapat Anda gunakan untuk menjalankan klaster yang terkandung dalam container. 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 yang dijelaskan dalam buku ini. Anda dapat menggunakan image tersebut sebagai titik awal untuk proyek Anda sendiri, meskipun image tersebut tidak dimaksudkan untuk digunakan dalam lingkungan produksi. Image tersebut terdapat di direktori docker_images
dari repositori kode buku ini (https://github.com/PacktPublishing/Learn-PostgreSQL-Second-Edition/).
Kami memisahkan setiap image Docker berdasarkan bab yang dirujuk oleh image tersebut. Ada image umum yang disebut standalone yang dapat digunakan sebagai dasar umum dan akan digunakan pada bab-bab awal. Bab lain, misalnya, yang membahas replikasi, memerlukan image sendiri untuk dijalankan.
Untuk memulai image standalone dasar, Anda cukup menjalankan skrip shell run-pg-docker.sh
, sebagai berikut:
$ sh run-pg-docker.sh
…
postgres@learn_postgresql:~$
Skrip akan meminta kata sandi; pengguna Anda harus memiliki kemampuan sudo untuk menghubungkan jaringan dan port Docker. Semua container akan meluncurkan sesi GNU Bash dengan pengguna sistem operasi postgres.
Pertama kali setiap container dimulai, akan memerlukan beberapa waktu karena perlu menarik image PostgreSQL dari jaringan, menginstal paket yang diperlukan, dan mengkonfigurasi image. Pada akhirnya, sistem akan membawa Anda ke prompt Bash; Anda sekarang masuk melalui container sebagai pengguna postgres dan dapat mulai berinteraksi dengan sistem mengikuti contoh dalam buku ini. Di setiap container, direktori PGDATA diatur ke /postgres/16/data
.
Setelah Anda keluar dari shell container, container akan berhenti, dan tidak ada lagi proses terkait PostgreSQL yang aktif.
Untuk memulai image spesifik per bab, Anda dapat menggunakan skrip yang sama, dengan menentukan folder bab sebagai argumen, misalnya:
$ sh run-pg-docker.sh chapter_12_extensions
Setiap container akan dimulai dengan instance PostgreSQL yang sudah diisi sebelumnya, sehingga Anda dapat dengan mudah mengikuti contoh kode di setiap bab.
Catatan: Mungkin ada beberapa perbedaan antara output yang Anda lihat dalam contoh kode dan output yang Anda dapatkan dari menjalankan perintah yang sama di container Docker. Misalnya, nilai yang dihasilkan secara otomatis dan jumlah tuple bisa berbeda, begitu juga dengan timestamp dan tanggal. Selain itu, setiap container Docker akan menyimpan data di direktori disk terpisah, sehingga jika Anda memanipulasi konten instance PostgreSQL dalam container, perubahan Anda akan tetap ada saat Anda memulai ulang container.
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:
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo apt-get update
Ini akan memastikan sumber repositori untuk sistem operasi Anda mutakhir sehingga Anda dapat menginstal paket PostgreSQL:
$ sudo apt-get -y install postgresql
Debian dan Ubuntu menyediakan perintah sendiri untuk mengontrol klaster, yaitu 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, jalankan perintah berikut:
$ sudo update-rc.d postgresql enable
Untuk memulai klaster Anda, Anda dapat menggunakan perintah service(1)
sebagai berikut:
$ sudo service postgresql start
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, lalu melanjutkan dengan instalasi sebagai paket distribusi:
$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/F-38-x86_64/pgdg-fedora-repo-latest.noarch.rpm
Daftar repositori yang tersedia dapat diperoleh dari situs web resmi PostgreSQL pada halaman unduhan (lihat bagian Referensi).
Paket diberi nama dengan postfix nomor versi. Anda dapat menginstal paket PostgreSQL menggunakan perintah berikut:
$ sudo dnf install -y postgresql16-server postgresql16
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
:
$ sudo systemctl edit postgresql-16
Perintah di atas akan membuka editor teks default Anda dengan file kosong; Anda dapat mengatur variabel PGDATA sebagai berikut, lalu simpan dan keluar dari editor untuk menerapkan perubahan:
[Service]
Environment=PGDATA=/postgres/16/data
Terakhir, saatnya menginisialisasi direktori database; ini dapat dilakukan dengan perintah instalasi spesifik Fedora bernama postgresql-16-setup
, sebagai berikut:
$ sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
Untuk mengaktifkan PostgreSQL mulai saat boot dan meluncurkan server segera, Anda dapat menjalankan perintah berikut:
$ sudo systemctl enable postgresql-16
$ sudo systemctl start postgresql-16.service
Jika instalasi Fedora Anda berisi perintah service(8)
, Anda juga dapat memulai layanan dengan:
$ sudo service postgresql-16 start
Menginstal PostgreSQL pada FreeBSD
PostgreSQL tersedia di FreeBSD melalui ports dan paket. Berkat perintah pkg(1)
, sangat mudah untuk menginstal PostgreSQL. Pertama, perbarui daftar paket, dan cari paket PostgreSQL yang diberi nama dengan versi mayor sebagai postfix:
$ pkg update
$ pkg search postgresql16
Anda kemudian dapat menginstal paket dengan menjalankan pkg(1)
dan menentukan kumpulan paket yang Anda butuhkan. Tentu saja, instalasi harus dijalankan sebagai pengguna dengan hak administratif, sebagai berikut:
$ sudo pkg install postgresql16-server-16.0 \
postgresql16-client-16.0 \
postgresql16-contrib-16.0 \
postgresql16-docs-16.0
Untuk memulai klaster, Anda perlu menginisialisasi direktori untuk melayani database dan mengaktifkan startup server saat mesin boot. Parameter minimal yang harus diatur adalah postgresql_enable
dan postgresql_data
.
Misalnya, untuk mengedit (sebagai pengguna administratif) file /etc/rc.conf
, tambahkan opsi sebagai berikut:
# untuk mengaktifkan PostgreSQL saat boot
postgresql_enable="YES"
# PGDATA yang akan digunakan
postgresql_data="/postgres/16/data"
Sekarang Anda dapat menginisialisasi direktori data dengan perintah berikut:
$ sudo /usr/local/etc/rc.d/postgresql initdb
Sekarang setelah semuanya siap, Anda dapat memulai instance PostgreSQL dengan perintah berikut:
$ sudo service postgresql start
Menginstal PostgreSQL dari Source Code
Menginstal PostgreSQL dari source code memerlukan pengunduhan tarball, yaitu paket terkompresi dengan semua file kode sumber, dan memulai kompilasi. Biasanya, ini membutuhkan beberapa menit, tergantung pada kekuatan mesin dan bandwidth I/O. Untuk mengkompilasi PostgreSQL dari source code, Anda akan memerlukan berbagai alat dan pustaka, terutama kompiler C yang sesuai dengan standar C99 (atau lebih tinggi). Biasanya, alat-alat ini sudah tersedia di sistem Linux atau Unix; jika tidak, silakan merujuk ke dokumentasi sistem operasi Anda tentang cara menginstal alat-alat ini.
Setelah semua dependensi terinstal, ikuti langkah-langkah berikut untuk mengkompilasi dan menginstal PostgreSQL:
Langkah pertama adalah mengunduh tarball PostgreSQL terkait versi yang ingin Anda instal, memverifikasi bahwa itu benar. Misalnya, untuk mengunduh versi 16.0, Anda dapat melakukan:
$ wget https://ftp.postgresql.org/pub/source/v16.0/postgresql-16.0.tar.bz2
...
$ wget https://ftp.postgresql.org/pub/source/v16.0/postgresql-16.0.tar.bz2.md5
Sebelum memulai kompilasi, periksa bahwa tarball yang diunduh tidak rusak:
$ md5sum --check postgresql-16.0.tar.bz2.md5
postgresql-16.0.tar.bz2: OK
Setelah Anda yakin bahwa tarball yang diunduh tidak korup, Anda dapat mengekstrak kontennya dan memulai kompilasi (perhatikan bahwa arsip yang diekstrak akan membutuhkan sekitar 200 MB ruang disk, dan kompilasi akan memakan ruang tambahan):
$ tar xjvf postgresql-16.0.tar.bz2
$ cd postgresql-16.0
$ ./configure --prefix=/usr/local
$ make && sudo make install
Jika Anda ingin atau memerlukan file layanan
systemd(1)
, tambahkan opsi--with-systemd
ke baris configure.
Setelah database diinstal, Anda perlu membuat pengguna untuk menjalankan database, biasanya dinamakan postgres, dan menginisialisasi direktori database:
$ sudo useradd postgres
$ sudo mkdir -p /postgres/16/data
$ sudo chown -R postgres:postgres /postgres/16
$ /usr/local/bin/initdb -D /postgres/16/data
Menginstal PostgreSQL melalui pgenv
pgenv adalah alat kecil yang memungkinkan Anda mengunduh dan mengelola beberapa instance dari versi PostgreSQL yang berbeda pada mesin yang sama. Ide di balik pgenv adalah untuk memungkinkan Anda menjelajahi berbagai versi PostgreSQL—misalnya, untuk menguji aplikasi Anda terhadap versi mayor yang berbeda. pgenv tidak bertujuan menjadi alat kelas enterprise untuk mengelola instance produksi; ini adalah alat untuk memungkinkan pengembang dan DBA bereksperimen dengan berbagai versi PostgreSQL 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:
$ git clone https://github.com/theory/pgenv
$ export PATH=$PATH:./pgenv/bin
Sekarang, perintah pgenv sudah tersedia, dan Anda dapat menjalankan perintah untuk mendapatkan prompt bantuan dan melihat perintah yang tersedia.
Ide di balik pgenv cukup sederhana: ini adalah alat untuk mengotomatiskan hal-hal "membosankan"—yaitu, mengunduh, mengkompilasi, menginstal, dan memulai/menghentikan klaster. Untuk membiarkan pgenv mengelola instance tertentu, Anda harus "menggunakannya". Ketika Anda menggunakan instance, pgenv mendeteksi apakah instance telah diinisialisasi atau belum, dan jika belum, ia akan melakukan inisialisasi untuk Anda.
Untuk menginstal versi 16.0 dan 15.1 dari PostgreSQL, Anda cukup menjalankan perintah berikut:
$ pgenv build 16.0
$ pgenv build 15.1
Perintah di atas akan mengunduh dan mengkompilasi dua versi PostgreSQL, dan waktu yang diperlukan untuk menyelesaikan operasi tergantung pada kekuatan dan kecepatan mesin yang Anda gunakan. Setelah itu, Anda dapat memutuskan instance mana yang akan dimulai dengan perintah use:
$ pgenv use 16.0
pgenv cukup pintar untuk melihat apakah instance yang Anda mulai sudah diinisialisasi, atau akan menginisialisasinya (hanya pada kali pertama) untuk Anda.
Jika Anda perlu menghentikan dan mengubah versi PostgreSQL yang digunakan, Anda dapat mengeluarkan perintah stopdiikuti oleh perintah use dengan versi yang ditargetkan. Misalnya, untuk menghentikan instance 16.0 dan memulai instance 15.1, Anda dapat menggunakan:
$ pgenv stop
$ pgenv use 15.1
Alat pgenv menyediakan banyak perintah lain untuk mendapatkan informasi tentang versi PostgreSQL mana yang diinstal, apa yang sedang dijalankan (jika ada), dan sebagainya.
Jika Anda mencari cara cepat untuk menguji dan menjalankan berbagai versi PostgreSQL pada mesin yang sama, pgenvadalah alat yang baik.
Ringkasan
Bab ini telah memperkenalkan Anda pada PostgreSQL, proyeknya, dan fitur-fitur utamanya. Anda telah mempelajari tentang terminologi PostgreSQL, serta cara menginstal klaster pada sistem operasi Unix-like, termasuk dalam container, serta menginstal klaster dari berbagai sumber.
Setelah menginstal PostgreSQL dan mempelajari terminologinya, Anda dapat melanjutkan ke bab berikutnya, di mana Anda akan belajar cara menggunakan, menghubungkan, dan menyimpan data dalam database.
Last updated