[[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