PostgreSQL 14’ü Ubuntu 22.04’e yükleyin (Jammy Jellyfish)

PostgreSQL topluluğunun, yoğun işlemsel iş yükleri için performansı artırmak ve dağıtılmış veriler için büyük destek sağlamak için yıllar içinde yaptıkları çok etkileyici. PostgresSQL veritabanı uzun yıllardır varlığını sürdürmektedir ve her gün milyonlarca işlem gerçekleştiren uygulamaları güçlendirmek için onu kullanan birçok büyük şirketin güvenini kazanmıştır. Bu makaleyi güncellediğimiz zaman itibariyle, en yeni ve kararlı sürüm PostgreSQL 14’tür.

PostgresSQL veritabanı, 30 yılı aşkın aktif geliştirme ile güvenilirliği, sağlamlığı ve performansı ile iyi bir üne sahiptir. Ayrıca web, mobil uygulamalar, bankacılık uygulamaları, analitik ve diğer birçok uygulama için birincil veri deposu olarak kullanılan SQL uyumlu bir veritabanı yönetim sistemidir.

PostgreSQL 14 sürümü, önceki sürümden birçok yeni özellik ve performans iyileştirme düzeltmesi ve yaması ile birlikte gelir. PostgreSQL 14 sürümündeki dikkate değer özelliklerden bazıları şunlardır:

  • Hazırlanan işlemlerin kodunun çözülmesi.
  • Devam eden işlemlerin mantıksal olarak çoğaltılması için destek.
  • Mantıksal çoğaltma artık verileri ikili biçimde aktarabilir.
  • DDL’leri içeren işlemlerin mantıksal kod çözme performansının iyileştirilmesi.
  • Mantıksal çoğaltmada tablo senkronizasyonu sırasında artık birden çok işleme izin verilmektedir.
  • ALTER SUBSCRIPTION deyimi, artık ADD PUBLICATION ve DROP PUBLICATION seçeneklerinin eklenmesiyle PUBLICATION eklemeyi/kaldırmayı kolaylaştırıyor.
  • Prosedürler OUT parametrelerine sahip olabilir.
  • CREATE FUNCTION ve CREATE PROCEDURE deyimleri artık SQL dilini desteklemektedir.
  • TRUNCATE, postgres_fdw modülünü kullanarak yabancı tablolarda çalışabilir.
  • Çok aralıklı veri türleri için destek eklendi.
  • pg_amcheck komut satırı yardımcı programı, birçok ilişkide katkıda bulunma/amcheck işlemlerini çalıştırmayı basitleştirmek için eklendi.
  • Bazı GiST dizinleri artık verileri önceden sıralayarak oluşturulabilir.
  • BRIN dizinleri artık aralık başına birden çok min/maks değeri kaydedebilir.
  • BRIN dizinleri artık çiçeklenme filtrelerini kullanabilir.

PostgreSQL 14’ü Ubuntu 22.04’e (Jammy Jellyfish) kurmak için bu makaleyi takip edin. Rehberimiz ayrıca veritabanı yapılandırmalarını, kullanıcı oluşturma, süper kullanıcı parolası belirleme ve uzak bir istemciden veritabanına bağlanmayı da izah edecektir.

Adım: Sistemi güncelleyin ve bağımlılıkları yükleyin

Ubuntu 22.04’ünüzde (Jammy Jellyfish), bir sistem güncellemesi yapın ve yükseltin

sudo apt update && sudo apt -y full-upgrade

Çekirdek güncellemeleri yapıldığında, sistemin yeniden başlatılması gerekecektir:

[ -f /var/run/reboot-required ] && sudo reboot -f

Yeniden başlatmanın ardından PostgreSQL deposunu yapılandırmak için gereken anahtar paketleri kurun.

Gerekli paketleri kurun:

sudo apt install vim curl wget gpg gnupg2 software-properties-common apt-transport-https lsb-release ca-certificates

Adım 2: Ubuntu 22.04’te PostgreSQL deposu ekleyin

Varsayılan işletim sistemi paketi havuzlarında bulunan PostgreSQL sürümü, varsayılan sürüm için güncel değil.

$ apt policy postgresql

Depoyu eklemenizi ve PostgreSQL 14’ü Ubuntu 22.04’ten yüklemenizi öneririz. İmza paketlerinde kullanılan GPG anahtarını içe aktaralım.

curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc|sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg

Aşağıdaki komutları kullanarak PostgreSQL deposunu Ubuntu 22.04 sisteminize ekleyin.

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Yeni eklenen depo hakkında sistemi bilgilendirin.

sudo apt  update

Yeni eklenen depo için depo meta veri senkronizasyonu başarılı olmalıdır:

Hit:1 http://apt.postgresql.org/pub/repos/apt jammy-pgdg InRelease

Adım 3: PostgreSQL 14’ü Ubuntu 22.04’e yükleyin

Depoyu eklediğimize göre, aşağıdaki komutlarla PostgreSQL 14’ü kuralım.

sudo apt install postgresql-14

PostgreSQL hizmeti otomatik olarak başlatılmalıdır ve aşağıdaki gibi doğrulanabilir.

$ systemctl status [email protected]
 [email protected] - PostgreSQL Cluster 14-main
     Loaded: loaded (/lib/systemd/system/[email protected]; enabled-runtime; vendor preset: enabled)
     Active: active (running) since Sat 2022-06-11 11:18:23 EAT; 1min 2s ago
    Process: 4139 ExecStart=/usr/bin/pg_ctlcluster --skip-systemctl-redirect 14-main start (code=exited, status=0/SUCCESS)
   Main PID: 4144 (postgres)
      Tasks: 7 (limit: 9460)
     Memory: 18.0M
        CPU: 165ms
     CGroup: /system.slice/system-postgresql.slice/[email protected]
             ├─4144 /usr/lib/postgresql/14/bin/postgres -D /var/lib/postgresql/14/main -c config_file=/etc/postgresql/14/main/postgresql.conf
             ├─4146 "postgres: 14/main: checkpointer " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">
             ├─4147 "postgres: 14/main: background writer " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "">
             ├─4148 "postgres: 14/main: walwriter " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">
             ├─4149 "postgres: 14/main: autovacuum launcher " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" >
             ├─4150 "postgres: 14/main: stats collector " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">
             └─4151 "postgres: 14/main: logical replication launcher " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" >

Jun 11 11:18:21 ubuntu22 systemd[1]: Starting PostgreSQL Cluster 14-main...
Jun 11 11:18:23 ubuntu22 systemd[1]: Started PostgreSQL Cluster 14-main.
lines 1-19/19 (END)

PostgreSQL’in kurulum sürümü aşağıdaki komutlarla kontrol edilebilir.

sudo -u postgres psql -c "SELECT version();"

Örnek Çıktı:

                                                             version                                                             
---------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 14.3 (Ubuntu 14.3-1.pgdg22.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.2.0-19ubuntu1) 11.2.0, 64-bit
(1 row)

Adım 4: PostgreSQL 14 veritabanına bağlanın.

PostgreSQL yönetim konsoluna erişmenin iki yolu vardır.

  1. postgres komutunu çalıştırın
$ sudo -u postgres psql
psql (14.3 (Ubuntu 14.3-1.pgdg22.04+1))
Type "help" for help.

postgres=#

Seçenek 2.

Bu seçenek için öncelikle PostgreSQL 14 kurulumu sonrası oluşturulan Postgres kullanıcısına geçiş yapmanız gerekmektedir.

sudo -i -u postgres

Buradayken örneğe bağlanın.

$ psql
psql (14.3 (Ubuntu 14.3-1.pgdg22.04+1))
Type "help" for help.

postgres=#

Şimdi örneğe bağlanmak için kullanılan yukarıdaki yöntemlerden herhangi biriyle, yine de veritabanınızı yönetebilirsiniz.

Adım 5: PostgreSQL 14 uzaktan erişimini yapılandırın (Opsiyonel)

PostgreSQL, roller adı verilen bir kavram aracılığıyla istemci kimlik doğrulaması için birden çok kimlik doğrulama yöntemini destekler. Varsayılan kimlik doğrulama yöntemi, Postgres rolünü bir Unix sistem hesabıyla ilişkilendiren kimlik doğrulamadır. Desteklenen tüm desteklenen kimlik doğrulama yöntemleri şunlardır:

  • Ident – yalnızca TCP/IP bağlantıları aracılığıyla desteklenir. İstemci sistem kullanıcı adını isteğe bağlı bir kullanıcı adı eşlemesi ile alır.
  • Password – bir rol bir parola kullanarak bağlanır.
  • Peer – ident’e benzer, ancak yalnızca yerel bağlantılarda desteklenir.
  • Trust – pg_hba.conf içinde tanımlanan koşullar karşılandığı sürece bir rolün bağlanmasına izin verir.

Veritabanı sunucu örneğimize uzaktan erişilebilmesi için /etc/postgresql/14/main/pg_hba.conf dosyasında değişiklik yapmalıyız.

Aşağıdaki komutları çalıştırarak PostgreSQL sunucunuzda parola doğrulamasına izin verin.

sudo sed -i '/^host/s/ident/md5/' /etc/postgresql/14/main/pg_hba.conf

Sonraki, tanımlama yöntemini aşağıdaki gibi eşten güvene değiştirmektir.

sudo sed -i '/^local/s/peer/trust/' /etc/postgresql/14/main/pg_hba.conf

Örneğe her yerden erişilmesine izin vermek için komutu aşağıdaki gibi düzenleyin:

sudo vim /etc/postgresql/14/main/pg_hba.conf

Dosyaya aşağıdaki satırları ekleyin.

# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             0.0.0.0/0                md5

# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256
host    all             all             0.0.0.0/0                md5

Şimdi /etc/postgresql/14/main/postgresql.conf adresindeki conf dosyasını aşağıdaki gibi düzenleyerek hizmetin * dinlediğinden emin olun.

sudo vim /etc/postgresql/14/main/postgresql.conf

Dosyada, satırı aşağıdaki gibi kaldırın ve düzenleyin.

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#-----------------------------------------------------------------------------
.......
listen_addresses='*'

Değişikliklerin etkili olması için şimdi yeniden başlatın ve PostgreSQL’i etkinleştirin.

sudo systemctl restart postgresql
sudo systemctl enable postgresql

Adım: PostgreSQL 14’te kullanıcıları yönetme

psql komutunu kullanarak PostgreSQL örneğinize bağlanın:

sudo -u postgres psql

Passw0rd şifresi ile admin adında yeni bir süper kullanıcı oluşturacağız.

CREATE ROLE admin WITH LOGIN SUPERUSER CREATEDB CREATEROLE PASSWORD 'Passw0rd';

Kullanıcının gerekli ayrıcalıklarla oluşturulduğunu doğrulayın.

postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 admin     | Superuser, Create role, Create DB                          | {}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

postgres=# 

Postgres kabuğundan demo1 adında bir kullanıcı oluşturalım ve ona demodb erişimi atayalım.

create database demodb;
create user demo1 with encrypted password 'Passw0rd';
grant all privileges on database demodb to demo1;

Adım: Uzak PostgreSQL 14 örneğine bağlanma

PostgreSQL hizmetinizin 5432 numaralı bağlantı noktasını dinleyip dinlemediğini kontrol edin.

$ ss -tunelp | grep 5432
tcp    LISTEN   0        244               0.0.0.0:5432           0.0.0.0:*      uid:123 ino:292971 sk:a <->                                                    
tcp    LISTEN   0        244                  [::]:5432              [::]:*      uid:123 ino:292972 sk:d v6only:1 <-> 

UFW güvenlik duvarınız varsa, bağlantı noktasına uzaktan bağlantı için izin verin.

sudo ufw allow 5432/tcp

Uzak bir istemci makineden psql komutuyla bağlanmak için sözdizimi;

psql 'postgres://<username>:<password>@<host>:<port>/<db>?sslmode=disable'

Bir uzak bağlantının nasıl başlatılabileceğine ilişkin bir örnek olarak aşağıdaki örneği görebilirsiniz.

psql 'postgres://admin:[email protected]:5432/postgres?sslmode=disable'

Yazının orijinalini buradan okuyabilirsiniz.