PostgreSQL 13, rilis terbaru dari perangkat lunak database Postgres, hadir dengan banyak peningkatan di bawah kap. Meskipun merupakan RDBMS open-source paling populer dan serbaguna, ini bukan yang termudah untuk disiapkan dan dimulai. Baca terus untuk mengetahui bagaimana Anda dapat memulai dengan Postgres versi terbaru pada versi LTS terbaru dari server Ubuntu.
Instalasi
Ubuntu 20.04 hadir dengan Postgres 12 dari alam semesta it gudang. Karena kami menginginkan versi 13, kami dapat langsung menggunakan repositori APT resmi proyek PostgreSQL. Repositori ini berisi binari untuk Ubuntu 20.04, dan juga menyertakan paket untuk berbagai ekstensi yang mungkin ingin Anda instal nanti.
Mari kita siapkan repositori seperti ini (perhatikan bahwa "focal" adalah nama kode untuk Ubuntu 20.04):
# add the repository
sudo tee /etc/apt/sources.list.d/pgdg.list <<END
deb http://apt.postgresql.org/pub/repos/apt/ focal-pgdg main
END
# get the signing key and import it
wget https://www.postgresql.org/media/keys/ACCC4CF8.asc
sudo apt-key add ACCC4CF8.asc
# fetch the metadata from the new repo
sudo apt-get update
Sekarang kita dapat menginstal server PostgreSQL dan alat baris perintah lainnya menggunakan:
sudo apt-get install -y postgresql-13
Instalasi melakukan beberapa hal:
- Ini menginstal server PostgreSQL, utilitas, dan klien baris perintah yang disebutpsql .
- Ini membuat pengguna sistem Linux bernama postgres . Semua file data dimiliki oleh pengguna ini, dan semua proses dijalankan sebagai pengguna ini.
- Ini membuat kluster database (Lihat di bawah). Di cluster ini, ia membuat basis data, juga disebut postgres .
- Ini membuat satu pengguna PostgreSQL (bukan pengguna sistem Linux), juga disebutpostgres . Pengguna PostgreSQL ini memiliki hak pengguna super.
Anda dapat melihat ini mulai membingungkan!
Cluster Basis Data
Dalam istilah Postgres, kami sekarang memiliki satu cluster database yang aktif dan berjalan. Cluster database tunggal dapat berisi satu atau lebih database. Di databasecluster yang kita miliki sekarang, ada database yang disebut "postgres". (Ada juga beberapa database "templat" yang dapat kita abaikan untuk saat ini.)
Sebuah cluster database dikelola oleh proses postgres utama yang disebut postmaster .Ini memunculkan berbagai proses anak yang melakukan berbagai tugas sistem atau menangani koneksi klien yang masuk. Lihat proses yang sedang berjalan:
alice@ubu:~$ ps -o uname,pid,ppid,cmd -H -U postgres
USER PID PPID CMD
postgres 4880 1 /usr/lib/postgresql/13/bin/postgres -D /var/lib/postgresql/13/main -c config_file=/etc/postgresql/13/main/postgresql.conf
postgres 4882 4880 postgres: 13/main: checkpointer
postgres 4883 4880 postgres: 13/main: background writer
postgres 4884 4880 postgres: 13/main: walwriter
postgres 4885 4880 postgres: 13/main: autovacuum launcher
postgres 4886 4880 postgres: 13/main: stats collector
postgres 4887 4880 postgres: 13/main: logical replication launcher
Disini proses postmaster adalah 4880 dan telah melahirkan 6 anak proses yang menangani berbagai aktivitas housekeeping. Anda juga dapat melihat lokasi cluster (/var/lib/postgresql/13/main
) dan lokasi file konfigurasi (/etc/postgresql/13/main/postgresql.conf
).
Memuat Ulang dan Memulai Ulang
Di berbagai waktu, Anda mungkin perlu memuat ulang atau mulai ulang server Postgres Anda. Memuat ulang menyebabkan Postgres memeriksa kembali file konfigurasinya dan menerapkan perubahan. Jika tidak ada perubahan pada file konfigurasi, tidak ada hal buruk yang terjadi. Memuat ulang tidak mengganggu klien yang terhubung saat ini. Untuk memuat ulang server Postgres Anda, Anda dapat melakukan:
sudo systemctl reload postgresql
Beberapa perubahan konfigurasi akan berlaku hanya setelah Anda me-restart server. Ini lebih mengganggu dan akan memutuskan semua klien yang terhubung. Untuk memulai ulang, Anda dapat:
sudo systemctl restart postgresql
File Log
Seperti yang Anda lihat, ada layanan systemd bernama postgresql
yang dapat Anda gunakan untuk mengontrol postmaster. Jika layanan tidak dimulai, Anda dapat memeriksa statusnya untuk memeriksa pesan kesalahan:
alice@ubu:~$ sudo systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Thu 2020-10-29 04:52:29 UTC; 25min ago
Main PID: 4557 (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 1075)
Memory: 0B
CGroup: /system.slice/postgresql.service
Oct 29 04:52:29 ubu systemd[1]: Starting PostgreSQL RDBMS...
Oct 29 04:52:29 ubu systemd[1]: Finished PostgreSQL RDBMS.
Server PostgreSQL menulis file log, yang dapat Anda periksa untuk pesan kesalahan yang lebih detail. File ini terletak di /var/log/postgresql/postgresql-13-main.log
:
alice@ubu:~$ cat /var/log/postgresql/postgresql-13-main.log
2020-10-29 04:52:34.096 UTC [4880] LOG: starting PostgreSQL 13.0 (Ubuntu 13.0-1.pgdg20.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0, 64-bit
2020-10-29 04:52:34.097 UTC [4880] LOG: listening on IPv4 address "127.0.0.1", port 5432
2020-10-29 04:52:34.099 UTC [4880] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2020-10-29 04:52:34.106 UTC [4881] LOG: database system was shut down at 2020-10-29 04:52:31 UTC
2020-10-29 04:52:34.112 UTC [4880] LOG: database system is ready to accept connections
Menghubungkan ke Server Postgres Anda
Sekarang setelah server kita aktif dan berjalan, mari kita coba menghubungkannya. Secara default, server hanya mendengarkan:
- Koneksi TCP dari 127.0.0.1 pada port 5432, dan
- Soket domain Unix di /var/run/postgresql
Karena konfigurasi default, satu-satunya cara untuk terhubung ke server sekarang adalah melalui soket Unix dari proses yang berjalan sebagai pengguna sistem postgres . Mari kita jalankan klien interaktif standar psql seperti ini:
alice@ubu:~$ sudo -u postgres psql postgres
psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
Type "help" for help.
postgres=#
Di sini kita menjalankan psql sebagai postgres pengguna sistem ("sudo -u postgres psql") dan menghubungkan ke database yang disebut "postgres" ("postgres" terakhir pada baris perintah.) Prompt "postgres=#" menunjukkan nama database yang saat ini terhubung (“postgres”) dan bahwa kami memiliki hak pengguna super (“#” sebagai lawan dari “$”).
Koneksi terjadi melalui soket Unix (ini adalah metode default di psql). Karena secara default pengguna postgres tidak memiliki kata sandi dan konfigurasi default memerlukan otentikasi kata sandi untuk koneksi TCP, sekarang tidak mungkin untuk terhubung melalui 127.0.0.1:5432 .
Mengizinkan Koneksi Masuk Dari Jaringan Internal
Pertama mari kita ubah konfigurasi untuk mengizinkan koneksi dari jaringan internal. Dengan asumsi IP server kita di jaringan ini adalah 10.1.2.3, kita dapat mengedit file konfigurasi utama di /etc/postgresql/13/main/postgresql.conf
dan ubah barisnya:
#listen_addresses = 'localhost' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
ke:
listen_addresses = 'localhost,10.1.2.3'
Kami juga perlu memberi tahu Postgres untuk menggunakan otentikasi kata sandi untuk koneksi yang masuk dari jaringan ini. Untuk ini, edit file konfigurasi lain bernama /etc/postgresql/13/main/pg_hba.conf
dan ubah barisnya:
host all all 127.0.0.1/32 md5
ke:
host all all 127.0.0.1/32 scram-sha-256
host all all 10.1.0.0/16 scram-sha-256
(Dengan asumsi jaringan internal adalah 10.1.0.0/16.)
Kami juga telah mengubah md5
default metode ke yang lebih baru dan lebih amanscram-sha-256
. Semua kemunculan md5
. lainnya dalam file juga harus diganti dengan scram-sha-256
. Jika aplikasi atau driver database Anda tidak mendukung metode ini, lanjutkan menggunakan md5
sebagai gantinya.
Agar perubahan ini diterapkan, Anda harus memulai ulang server:
sudo systemctl restart postgresql
Membuat Pengguna dan Basis Data Biasa
Kita hampir sampai!
Kami sekarang dapat membuat pengguna biasa yang dapat dihubungkan oleh aplikasi kami, dan basis data yang memiliki kontrol penuh. Terhubung sebagai pengguna super postgres secara lokal dari mesin server untuk melakukan ini:
alice@ubu:~$ sudo -u postgres psql postgres
psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
Type "help" for help.
postgres=# SET password_encryption = 'scram-sha-256';
SET
postgres=# CREATE USER alice PASSWORD 's3cr3tp@ss';
CREATE ROLE
postgres=#
(Abaikan perintah pertama jika Anda ingin menggunakan md5
sebagai gantinya.) Ini membuat pengguna bernama alice dengan kata sandi s3cr3tp@ss . Mari kita juga membuat database yang akan dimiliki oleh pengguna ini:
postgres=# CREATE DATABASE app1 OWNER alice;
CREATE DATABASE
postgres=#
Basis datanya disebut app1 . Sejak alice memiliki database ini, semua operasi dalam database (seperti membuat tabel, menyisipkan baris) diperbolehkan jika aplikasi terhubung sebagai pengguna alice .
Ayo coba sambungkan sebagai alice , melalui jaringan:
~$ psql -h 10.1.2.3 -U alice app1
Password for user alice:
psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
app1=>
Dingin! Kami sekarang terhubung ke database app1 sebagai pengguna alice .
Menghapus, Mencadangkan, dan Memulihkan Basis Data
Berikut adalah beberapa trik yang dapat membantu Anda terus bekerja dengan Postgresserver Anda:
Menghapus database
Anda dapat menghapus database yang baru saja Anda buat (“app1”), seperti ini:
alice@ubu:~$ psql -h 127.0.0.1 -U alice app1
Password for user alice:
psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
app1=> \c postgres
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
You are now connected to database "postgres" as user "alice".
postgres=> DROP DATABASE app1;
DROP DATABASE
postgres=>
Perhatikan bahwa Anda perlu beralih ke database lain terlebih dahulu menggunakan perintah “\c” dari psql.
Untuk membuat database lain, atau untuk membuat ulang app1 , hubungkan sebagai superuser dan lakukan “CREATE DATABASE” seperti sebelumnya.
Cadangkan database
Cara termudah untuk membuat cadangan data di database Anda adalah dengan menggunakan pg_dump seperti ini:
alice@ubu:~$ pg_dump -h 127.0.0.1 -U alice -f backup.sql app1
Password:
Ini membuat file SQL bernama “backup.sql” yang berisi semua perintah SQL yang diperlukan untuk membuat ulang skema dan data dalam database app1 , dalam format teks. Anda dapat menjalankan perintah ini di database mana pun, dan skema serta data akan dimasukkan ke dalam database tersebut.
Baca lebih lanjut tentang pg_dump di sini.
Memulihkan data
File perintah SQL yang Anda buat di atas dapat dipulihkan seperti ini:
alice@ubu:~$ psql -h 127.0.0.1 -U alice app2
Password for user alice:
psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
app2=> \i backup.sql
SET
SET
(..snip..)
Perhatikan bahwa kami memulihkan skema dan data ke database lain, app2 . Perintah “\i” psql memungkinkan Anda menjalankan perintah SQL dari sebuah file.
Langkah Selanjutnya
Ada banyak artikel, tutorial, video, dan kursus di luar sana untuk membantu Anda menjadi lebih mahir dengan PostgreSQL. Namun, luangkan waktu, dengan dokumentasi resmi di sini, yang menyediakan cakupan resmi dan luas dari semua fitur PostgreSQL, sintaksis, dan utilitas yang dibundel.