PostgreSQL extention — adminpack

Tomasz Gintowt
2 min readJun 23, 2021

--

TL;TR Witaj, znajdziesz tutaj informacje o tym co dobrego możesz znaleźć w rozszerzeniu adminpack.

adminpack to zestaw funkcji, które pomagają w zarządzaniu instancja PostgreSQL, pozwalają na tworzenie, kasowanie, zmienianie nazwy plików lub wyświetlanie zawartości. Wszystko to z poziomu konsoli psql.

postgres=# create extension adminpack;
CREATE EXTENSION
postgres=# select pg_file_write('/tmp/test.txt','test test', 'false');
pg_file_write
---------------
9
(1 row)

Właśnie stworzyłeś plik /tmp/test.txt, zobaczmy jego zwartość.

postgres=# select pg_read_file('/tmp/test.txt');
pg_read_file
--------------
test test
(1 row)

Co ciekawe, pg_read_file nie jest częścią adminpack, jest defaultową funkcją. Co się stanie, jeśli jeszcze raz będziemy chcieli zapisać “test test” do tego samego pliku ?

postgres=# select pg_file_write('/tmp/test.txt','test test', 'false');
ERROR: file "/tmp/test.txt" exists

Taki plik już istnieje, jak więc możemy dopisać coś do już istniejącego ?

postgres=# select pg_file_write('/tmp/test.txt',' test1 test1', 'true');
pg_file_write
---------------
11
(1 row)
postgres=# select pg_read_file('/tmp/test.txt');
pg_read_file
----------------------
test test test1 test1
(1 row)

Zwróć uwagę, na parametr “true”, który pozwala na dopisywanie do już istniejącego pliku.

Teraz zmieńmy nazwę pliku.

postgres=# select pg_file_rename('/tmp/test.txt','/tmp/nowy.txt');
pg_file_rename
----------------
t
(1 row)
postgres=# select pg_read_file('/tmp/test.txt');
ERROR: could not open file "/tmp/test.txt" for reading: No such file or directory
postgres=# select pg_read_file('/tmp/nowy.txt');
pg_read_file
----------------------
test test test1 test1
(1 row)

Na koniec, skasujmy plik.

postgres=# select pg_file_unlink('/tmp/nowy.txt');
pg_file_unlink
----------------
t
(1 row)
postgres=# select pg_read_file('/tmp/nowy.txt');
ERROR: could not open file "/tmp/nowy.txt" for reading: No such file or directory

Na zakończenie dodam, że funkcje dostępne w adminpack są dostępne tylko dla superuserów, jeżeli chcesz przyznać prawa do ich wykonywania innym uzytkownikom, można to zrobić komendą:

postgres=#GRANT EXECUTE on function pg_file_write to nazwa_usera;
GRANT

Tomasz Gintowt jest Architektem/DevOps/DBA/Trenerem, głównie skupiony na dostarczaniu rozwiązań składowania i przetwarzania danych. Nie są mu obce wszelkiej maści bazy danych, systemy real-time data i streamingu. Obecnie pracuje z Apache Kafka, RabbitMQ, Elastic Stack i PostgreSQL. Organizator spotkań DataOps Poland. Prywatnie fan ciasta marchewkowego.

https://www.linkedin.com/in/tomasz-gintowt/

https://www.meetup.com/dataops-poland/

--

--

Tomasz Gintowt

Architect, DevOps, SysOps, and DBA. Currently, I’m an IT Systems Engineer working with Apache Kafka, RabbitMQ, PostgreSQL, Elastic Stack in Real-Time Data Team.