PostgreSQL extention — adminpack
--
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 directorypostgres=# 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.