PostgreSQL
|
Pengguna Fedora Server Edition dapat menemukan informasi tambahan di Pengaturan Server Database PostgreSQL |
Pemasangan
Pemasangan dan inisialisasi server PostgreSQL sedikit berbeda dibandingkan dengan paket lain dan distribusi Linux lainnya. Dokumen ini bertujuan untuk merangkum langkah-langkah pemasangan dasar yang relevan dengan rilis Fedora Linux terbaru.
sudo dnf install postgresql-server postgresql-contrib
Server PostgreSQL tidak berjalan dan dinonaktifkan secara default. Untuk mengatur agar server dimulai saat boot, jalankan perintah berikut:
sudo systemctl enable postgresql
Database perlu diisi dengan data awal setelah instalasi. Inisialisasi database dapat dilakukan menggunakan perintah berikut. Perintah ini akan membuat berkas konfigurasi postgresql.conf dan pg_hba.conf
sudo postgresql-setup --initdb --unit postgresql
Untuk memulai server PostgreSQL secara manual, jalankan
sudo systemctl start postgresql
Pembuatan Pengguna dan Pembuatan Database
Sekarang Anda perlu membuat pengguna dan basis data untuk pengguna tersebut. Proses ini harus dijalankan dari akun pengguna postgres di sistem Anda.
sudo -u postgres psql
Dari sini Anda dapat membuat pengguna PostgreSQL dan basis data. Di sini, kami akan mengasumsikan akun pengguna komputer Anda bernama lenny. Catatan: Anda juga dapat menjalankan perintah ini dari shell dengan createuser lenny dan createdb --owner=lenny carl.
postgres=# CREATE USER lenny WITH PASSWORD 'leonard'; postgres=# CREATE DATABASE my_project OWNER lenny;
Mungkin ide yang baik untuk menambahkan kata sandi untuk pengguna postgres saat Anda melakukannya:
postgres=# \password postgres
Tekan Ctrl + D atau \q untuk keluar dari sesi psql sambil tetap menjalankan sesi sebagai pengguna postgres. Sekarang Anda dapat mengakses basis data baru Anda dari akun pengguna Anda (lenny) dan mulai menggunakannya.
psql my_project
[[initial configuration]] == Konfigurasi Awal
Server PostgreSQL menggunakan dua berkas konfigurasi utama
-
/var/lib/pgsql/data/postgresql.conf
-
/var/lib/pgsql/data/pg_hba.conf
Jika Anda mengalami kesalahan identifikasi dari aplikasi Anda, Anda mungkin perlu melakukan solusi yang direkomendasikan yang dijelaskan di https://serverfault.com/questions/406606/postgres-error-message-fatal-ident-authentication-failed-for-user?newreg=a4fdc3e21349449985cc65b82399c5b4
sudo gedit /var/lib/pgsql/data/pg_hba.conf
dan ubah host all all 127.0.0.1/32 ident menjadi host all all 127.0.0.1/32 md5. Hal ini seharusnya memungkinkan sebagian besar aplikasi untuk terhubung menggunakan nama pengguna/kata sandi.
Peningkatan
Seperti yang dapat Anda lihat dari pesan kesalahan dalam contoh saya, ini bukan instalasi baru, melainkan pembaruan.
Nov 14 11:45:56 mlich-lenovo.usersys.redhat.com postgresql-check-db-dir[2108]: An old version of the database format was found. Nov 14 11:45:56 mlich-lenovo.usersys.redhat.com postgresql-check-db-dir[2108]: Use "postgresql-setup upgrade" to upgrade to version 9.3.
Dengan versi 9, Anda dapat menggunakan alat pembaruan. Alat ini dikemas sebagai postgresql-upgrade:
postgresql-setup upgrade Mengalihkan ke /bin/systemctl stop postgresql.service Memperbarui database: Berhasil Berkas konfigurasi telah diganti dengan konfigurasi default. Konfigurasi dan data sebelumnya disimpan di folder /var/lib/pgsql/data-old. Lihat /var/lib/pgsql/pgupgrade.log untuk detailnya.
Data tersebut terletak di
-
/var/lib/pgsql/data
-
/var/lib/pgsql/data-old
Peningkatan itu sendiri akan mencadangkan data yang ada dan memigrasikan basis data Anda. Jangan lupa untuk memigrasikan konfigurasi Anda (dengan meld, misalnya: meld /var/lib/pgsql/data{,-old}/postgresql.conf).
Anda mungkin perlu beralih ke mode kepercayaan PostgreSQL sebelum melakukan pembaruan. Masalah ini seharusnya sudah diperbaiki.
Anda juga dapat melakukan upgrade dengan cara membackup database Anda dan memuatnya kembali. Untuk informasi lebih lanjut, lihat tautan:#link-upgrade[dokumentasi resmi].
Firewall
PostgreSQL beroperasi pada port 5432 (atau port lain yang Anda atur di berkas postgresql.conf). Di firewalld, Anda dapat membukanya seperti ini:
# Pastikan tetap aktif setelah reboot firewall-cmd --permanent --add-port=5432/tcp # Ubah konfigurasi runtime firewall-cmd --add-port=5432/tcp
Dalam hal iptables:
iptables -A INPUT -p tcp --dport 5432 -m state --state NEW,ESTABLISHED -j ACCEPT
Perlu diingat bahwa Anda mungkin tidak ingin membuka server basis data Anda untuk seluruh dunia.
SELinux
Jika Anda menggunakan SELinux yang diaktifkan, Anda mungkin mengalami masalah saat mencoba melakukan konfigurasi non-standar. Misalnya, jika Anda ingin mengubah lokasi database Anda, Anda harus menambahkan pemetaan konteks baru untuk lokasi baru tersebut:
semanage fcontext -a -t postgresql_db_t "/my/new/location(/.*)?"
Jika port default tidak berfungsi untuk Anda, Anda mungkin perlu memetakan jenis port Postgre ke port yang Anda inginkan:
semanage port -a -t postgresql_port_t -p tcp 5433
Jika Anda menginstal aplikasi web yang ingin berkomunikasi dengan PostgreSQL melalui TCP/IP, Anda harus memberitahu SELinux untuk mengizinkan hal ini pada host server web:
setsebool -P httpd_can_network_connect_db on
Konfigurasi
Seperti yang telah disebutkan di atas, server PostgreSQL menggunakan dua berkas konfigurasi utama
-
/var/lib/pgsql/data/postgresql.conf
-
/var/lib/pgsql/data/pg_hba.conf
systemd
Beberapa parameter konfigurasi diteruskan ke daemon melalui opsi baris perintah. Perilaku ini dapat menggantikan pengaturan di postgresql.conf. Misalnya, jika Anda ingin mengubah nomor port server menjadi 5433, buatlah berkas bernama /etc/systemd/system/postgresql.service yang berisi:
.include /lib/systemd/system/postgresql.service [Service] Environment=PGPORT=5433
Catatan: Mengubah PGPORT atau PGDATA biasanya juga memerlukan penyesuaian konfigurasi SELinux; lihat bagian selinux.
Silakan ikuti dokumentasi systemd di 2 untuk informasi lebih lanjut.
postgresql.conf
Jika Anda ingin PostgreSQL menerima koneksi jaringan, Anda harus mengubah
listen_addresses = 'localhost'
menjadi
listen_addresses = '*'
pg_hba.conf
Setelah database Anda terkonfigurasi, Anda perlu mengatur akses ke server database Anda. Hal ini dapat dilakukan dengan mengedit berkas /var/lib/pgsql/data/pg_hba.conf. Di dalam berkas tersebut terdapat aturan-aturan seperti berikut:
# TYPE DATABASE USER ADDRESS METHOD host all all 127.0.0.1/32 md5 host all all ::1/128 md5 local all postgres peer
Kolom pertama menunjukkan jenis koneksi. Kolom ini dapat memiliki nilai-nilai berikut:
-
lokal — Soket domain Unix
-
host — soket TCP/IP biasa atau yang dienkripsi SSL
-
hostssl — soket TCP/IP yang dienkripsi SSL
-
hostnossl — soket TCP/IP biasa
Kolom terakhir menentukan metode autentikasi yang akan digunakan.
-
md5 — Klien harus menyediakan kata sandi yang diproses menggunakan algoritma MD5.
-
ident — mendapatkan nama pengguna klien yang terhubung dari sistem operasi dan mencocokkannya dengan peta yang ditentukan
-
trust — anyone who is able to connect to PostgreSQL server may act as any user without supplying password
-
peer — mengambil nama pengguna dari sistem operasi dan memeriksa apakah nama tersebut sesuai dengan nama pengguna dalam database.
peer — mengambil nama pengguna dari sistem operasi dan memeriksa apakah nama tersebut sesuai dengan nama pengguna dalam database.
Pengaturan default biasanya dibatasi untuk localhost.
Saat Anda menginstal server basis data dan pertama kali mencoba "membuatnya berfungsi", Anda harus mematikan firewall, SELinux, dan mengatur otentikasi postgres menjadi permisif. Perlu diingat bahwa hal ini akan sangat mengekspos server Anda, jadi lakukan hal ini hanya pada jaringan yang tepercaya — sebaiknya tanpa jaringan sama sekali:
host all all 127.0.0.1/32 trust
Segera setelah Anda dapat terhubung, nyalakan sistem keamanan satu per satu sambil memastikan koneksi dapat terhubung.
Untuk informasi lebih lanjut, lihat dokumentasi resmi untuk berkas pg_hba.conf.
Optimasi
Konfigurasi default PostgreSQL sangat kurang dioptimalkan. Sistem ini dapat menangani aplikasi sederhana tanpa akses database yang konsisten, tetapi jika Anda membutuhkan kinerja yang lebih tinggi, Anda harus mengonfigurasi ulang instance Anda. Semua pengaturan penting terdapat di /var/lib/pgsql/data/postgresql.conf\`. Selain itu, mekanisme pencatatan (logging) tidak dikonfigurasi dengan intuitif.
Kinerja
Jumlah klien yang dapat terhubung ke PostgreSQL secara bersamaan:
max_connections = <number>
shared_buffers adalah titik awal. Ini memberitahu PostgreSQL berapa banyak memori yang dialokasikan untuk caching. Menyetel nilai ini menjadi 25% dari total memori sistem Anda adalah langkah awal yang baik. Jika tidak cocok untuk Anda, coba atur antara 15% hingga 40% dari total memori.
shared_buffers = <memory unit>
Nilai ini digunakan oleh perencana kueri untuk mengetahui berapa banyak memori yang tersedia di sistem. Perencana kueri menggunakan informasi ini untuk menentukan apakah rencana kueri dapat muat dalam memori atau tidak. Menyetel nilai ini menjadi 50% dari total memori adalah praktik umum.
effective_cache_size = <memory unit>
Nilai ini digunakan oleh perencana kueri untuk mengetahui berapa banyak memori yang tersedia di sistem. Perencana kueri menggunakan informasi ini untuk menentukan apakah rencana kueri dapat muat dalam memori atau tidak. Menyetel nilai ini menjadi 50% dari total memori adalah praktik umum.
work_mem = <memory unit>
Untuk informasi lebih lanjut tentang topik ini, saya sarankan Anda membaca tautan berikut: #link-tuning[dokumen resmi] tentang pengoptimalan PostgreSQL.
Pencatatan
Secara default, log diputar setiap minggu dan Anda mungkin tidak menemukan banyak informasi di dalamnya. Anda mungkin melewatkan tingkat log, tanggal, waktu, dan sebagainya. Selain itu, untuk aplikasi web sederhana, beberapa orang lebih memilih untuk meningkatkan tingkat detail.
log_destination = 'stderr'
Ini sudah cukup baik. Jika Anda ingin syslog menangani log Anda, ubah ‘stderr’ menjadi ‘syslog’, atau bahkan ‘syslog,stderr’. Jika Anda memilih syslog, jangan lupa untuk mengonfigurasi syslog itu sendiri; untuk informasi lebih lanjut, lihat tautan:#link-logging[dokumentasi resmi].
logging_collector = on
Jika logging dilakukan ke stderr, postgres akan mengumpulkan semua log jika Anda mengaktifkan opsi logging_collector.
Ini adalah opsi default:
log_filename = 'postgresql-%a.log'
Metode yang disarankan adalah memberi nama berkas log berdasarkan tanggal pembuatannya:
log_filename = 'postgresql-%G-%m.log
Rotasi. Hal ini benar-benar tergantung pada aplikasi itu sendiri. Dalam kasus aplikasi sederhana dengan sedikit data di database, semua log dapat disimpan secara permanen di disk tanpa perlu rotasi.
log_truncate_on_rotation = off log_rotation_age = 31d
Tingkatkan jumlah entri dalam log:
client_min_messages = notice # default notice log_min_messages = info # default warning log_min_error_statement = notice # default error
Jika Anda ingin mencatat kueri lambat, silakan gunakan opsi ini:
log_min_duration_statement = 1000 # in ms
Entri log default tidak mengandung banyak informasi:
FATAL: Ident authentication failed for user "test" DETAIL: Connection matched pg_hba.conf line 84: "host all all ::1/128 ident"
Mari kita perbaiki menjadi:
2013-12-30 17:51:36 CET testx@::1(50867):postgres [11213] FATAL: password authentication failed for user "testx" 2013-12-30 17:51:36 CET testx@::1(50867):postgres [11213] DETAIL: Connection matched pg_hba.conf line 84: "host all all ::1/128 md5 "
Anda hanya perlu mengubah opsi log_line_prefix.
# %t -- timestamp # %u -- user # %r -- client's host # %d -- database # %p -- PID log_line_prefix = '%t %u@%r:%d [%p] '
Jika Anda hanya menjalankan satu database dengan satu pengguna yang terhubung, lebih masuk akal untuk menyederhanakan prefiks menjadi
log_line_prefix = '%t [%p] '
Referensi
Menemukan kesalahan ketik, informasi yang hilang atau sudah tidak berlaku, atau hal lain yang dapat diperbaiki? Edit dokumen ini di https://pagure.io/fedora-docs/quick-docs.
Want to help? Learn how to contribute to Fedora Docs ›