PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Memulai Dengan Postgres 13 di Ubuntu 20.04

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SpringBoot+Kotlin+Postgres dan JSONB:org.hibernate.MappingException:Tidak ada pemetaan Dialek untuk tipe JDBC

  2. Hasilkan n baris NULL di PostgreSQL

  3. Bagaimana cara mendapatkan min/maks dari dua bilangan bulat di Postgres/SQL?

  4. kesalahan aplikasi uji django - Mendapat kesalahan saat membuat basis data uji:izin ditolak untuk membuat basis data

  5. Terjadi kesalahan saat membuat basis data spasial. GALAT:tidak dapat memuat perpustakaan /usr/pgsql-9.1/lib/rtpostgis-2.0.so