[[oktatas:linux:adatbázis-szerver|< Adatbázis-szerver]]
====== PostgreSQL ======
* **Szerző:** Sallai András
* Copyright (c) 2020, Sallai András
* Szerkesztve: 2020, 2023
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== A PostgreSQL-ről =====
A PostgreSQL egy nyílt forráskódú adatbáziskezelő rendszer.
A Berkeley Egyetemen egy Ingres nevű adatbáziskezelő szoftvert fejlesztettek az 1970-s
évek óta, amit később átneveztek POST-inGRES névre, 1985 körül. 1995-ig a POSTQUEL
lekérdező nyelvet használta, ekkor váltottak SQL-re. 1996-tól fejlesztik az egyetemen kívül.
Az Ingres alapján több kereskedelmi szoftver jött létre:
* Sybase
* Microsoft SQL Server
* NonStop SQL
===== Telepítés =====
apt install postgresql
===== Ellenőrzés =====
Telepítés után ellenőrizzük a foglalt TCP portokat:
$ ss -lt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.1:postgresql 0.0.0.0:*
LISTEN 0 128 [::1]:postgresql [::]:*
$ pstree -c
systemd
└─postgres
├─postgres
├─postgres
├─postgres
├─postgres
├─postgres
└─postgres
sudo -u postgres psql -c "SELECT version();"
Kérdezzük le a státuszt:
# systemctl status postgresql
===== A PostgreSQL vezérlése =====
Leállítás:
# systemctl stop postgresql
Indítás:
# systemctl start postgresql
Újraindítás:
# systemctl restart postgresql
Státusz:
# systemctl status postgresql
===== A postgres felhasználó =====
Telepítés után létrejön egy postgres felhasználó.
Rendszergazdaként sem férünk hozzá az adatbázis rendszerhez,
csak a postgres felhasználón keresztül.
Rendszergazdaként váljunk váljunk posgres felhasználóvá,
ha kapcsolódni akarunk:
# su - postgres
Ha van sudo felhasználónk, akkor így is válthatunk felhasználót:
$ sudo su - postgres
===== Parancssor =====
A PostgreSQL adatbázishoz a psql klienssel kapcsolódhatunk.
Váltsunk postgres felhaszálóra, majd indítsuk el a klienst:
# su - postgres
$ psql
psql (11.5 (Debian 11.5-1+deb10u1))
Type "help" for help.
postgres=#
Kilépés:
postgres=# \q
==== Felhasználó és adatbázis ====
pstgres felhasználóként:
$ createuser mari
$ createdb maridb
Más felhasználóként:
sudo su - postgres -c "createuser mari"
sudo su - postgres -c "createdb maridb"
Adjunk meg minden jogot:
postgres=# grant all privileges on database maridb to mari;
alter user mari password 'titok';
Jelszóval:
create user myuser with encrypted password 'mypass';
===== Adatbázisok =====
Adatbázis létrehozása:
postgres=# create database test_db;
Adatbázisok listázása:
\l
select datname from pg_database;
==== Kapcsolódás ====
# su - postgres
$ psql
postgres=# \c zolzrt
You are now connected to database "zoldzrt" as user "postgres".
zoldzrt=#
==== Táblázat ====
Listázás:
zoldzrt=# \dt
Did not find any relations.
zoldzrt=#
Létrehozás:
zoldzrt=# create table dolgozok (
zoldzrt(# id integer primary key,
zoldzrt(# name varchar,
zoldzrt(# city varchar);
CREATE TABLE
===== Kliensek hitelesítése =====
Az adatbázis rendszerhez alapértelmezetten csak
a postgres linuxos felhasználó fér hozzá.
Ha szeretnénk más felhasználók számára is engedélyezni
a hozzáférést a következőket állítsuk be:
# nano /etc/postgresql/11/main/pg_hba.conf
# "local" is for Unix domain socket connections only
local all all md5
Indítsuk újra a szolgáltatást:
# systemctl restart postgresql
==== Felhasználók ====
postgres=# CREATE USER kati PASSWORD ‘titok’;
$ psql -d katidb -U kati
===== Biztonság =====
Ha szeretnék fokozni a védelmet a psql
jelszavazásával:
# su - postgres
# psql -c "ALTER USER postgres WITH PASSWORD 'titok';"
===== Távoli hozzáférés =====
A távoli hozzáférés alapértelmezetten tiltva van.
Szerkesszük a postgresql.conf állományt:
# nano /etc/postgresql/11/main/postgresql.conf
Keressük meg a CONNECTIONS AND AUTHENTICATION részt,
és állítsuk be a listen_addresses tulajdonságot:
#-----------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#-----------------------------------------------------
# - Connection Settings -
listen_addresses = '*'
nano /etc/postgresql/15/main/pg_hba.conf
Keressük meg a következő sort:
host all all 127.0.0.1/32 scram-sha-256
Cseréljük erre:
host all all 0.0.0.0/0 scram-sha-256
# systemctl restart postgresql
===== Backup/Restore =====
==== Mentés ====
Az egész adatbázis mentése:
# su - postgres
$ pg_dumpall > pg_backup.sql
Egy adatbázis mentése:
$ pg_dump zoldzrt > zoldzrt.sql
==== Visszaállítás ====
Visszaállítás vagy restore:
psql uresdb < cegdb.bak
A parancs nem hozza létre az adatbázist, annak már léteznie kell.
createdb -T template0 uresdb
psql uresdb < mentes.bak
Az adatbázis visszaállítás előtt, ha volt egy felhasználó
akinek a tulajdonában volt, azt is vegyük fel:
createuser valaki
psql uresdb < mentes.bak
A psql hiba esetén folytatja a helyreállítást és csak a
folyamat végén írja ki milyen hibák voltak.
Ha bekapcsoljuk az ON_ERROR_STOP tulajdonságot, akkor
a hibát azonnal a képernyőre írja.
psql --set ON_ERROR_STOP=on uresdb < mentes.bak
Másik lehetőség, ha a helyreállítást egyetlen tranzakcióként
szeretnénk végrehajtani. Így ha hiba van egyáltalán nem történik
semmi:
psql -1 uresdb < mentes.bak
psql --single-transaction uresdb < mentes.bak
==== Teljes mentés visszaállítása ====
psql -f teljesMentes.bak postgres
==== Távoli szerver mentése ====
pg_dump -h gépnév -p port dbnev > mentes.sql
pg_dump -U usernev -h gépnév -p port dbnev > mentes.sql