Tartalomjegyzék
PostgreSQL
- Szerző: Sallai András
- Copyright © 2020, Sallai András
- Szerkesztve: 2020, 2023
- Licenc: 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