PostgreSQL - sesje użytkowników



Poniżej zamieszczam zapytania dotyczące sesji użytkowników, ich aktywności i kończenia ich pracy. Jeżeli mowa o samych użytkownikach bazodanowych, to zobaczyć ich możemy w tabeli pg_roles. W moim przypadku jest tylko jeden użytkownik, ale w Waszej bazie danych może być ich znacznie więcej. Jak widzimy użytkownicy mają przypisane role (uprawnienia). W postgres'ie mamy także dziedziczenie ról po danych użytownikach, ale to jest temat na osobny artykuł, tak więc o tym kiedy indziej.

SELECT * from pg_roles ;
                        
 rolname  | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcatupdate | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolconfig | oid
----------+----------+------------+---------------+-------------+--------------+-------------+----------------+--------------+-------------+---------------+-----------+-----
 postgres | t        | t          | t             | t           | t            | t           | t              |           -1 | ********    |               |           |  10
(1 wiersz)

Sprawdzenie podłączonych do bazy użytkowników

SELECT datname, usename, client_addr, client_port 
FROM pg_stat_activity;

 datname  | usename  | client_addr | client_port
----------+----------+-------------+-------------
 postgres | postgres |             |          -1
(1 wiersz)

Ubijanie sesji użytkowników - wykonujemy przy pomocy funkcji pg_terminate_backend(pid). W przypadku użytkowników z innymi rolami musimu posiadać uprawnienia superusera

SELECT *, pg_terminate_backend(pid) 
FROM pg_stat_activity 
WHERE usename='username';

W powyższym przykładzie można ukrócić ilość wyświetlanych kolum, ja akurat dla przykładu wziąłem wszystkie z tabeli pg_stat_activity. W miejsce username wstawiamy odpowiedniego użytkownika.