From 80436fd01c3c6b1c0f17515184232ad99a4e929b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rychli=C5=84ski=20Arkadiusz?= Date: Tue, 8 Nov 2022 12:27:57 +0100 Subject: [PATCH] Dodany README.md --- README.txt | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 README.txt diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..7a539e0 --- /dev/null +++ b/README.txt @@ -0,0 +1,110 @@ +# multisql - narzędzie do masowego uruchamiania skryptów SQL na wielu bazach + +## Opis + +multisql - uruchamia zestaw skryptów na skonfigurowanej liście baz danych. + +Program, dla każdej z baz wskazanych w konfiguracji, uruchamia kolejno każdy +z plików sql wskazanych parametrem lub w pliku konfiguracji poprzez +uruchomienie narzędzia psql: + +``` + psql -f skrypt.sql -w -L log.txt _szczegóły_połaczenia_ 2>stderr.txt > stdout.txt +``` + +Skrypty mogą mieć dowolne rozszerzenia ale podkatalogi nie są obsługiwane. +Pliki wynikowe zapisywane są do katalogu wskazanego w outdir w strukturze o postaci +output: + +``` + -> data-godzina-pid + -> host-port-baza-user + -> skrypt.sql + -> log.txt + -> stdout.txt + -> stderr.txt +``` + +## Użycie + +``` + multisql -outdir /tmp -sqldir /data/skrypty -passfile ./hasla +``` + +## Opis flag + +``` + -config string + Plik konfiguracji (default "multisql.conf") + -log string + Plik, do którego zostanie dopisany log programu + -outdir string + Katalog (istniejący i z prawem do zapisu), do którego generowane są wyniki + -passfile string + Plik pgpass z hasłami do baz + -sqldir string + Katalog, w którym znajdują się skrypty do uruchomienia (default "scripts") + -verbose + Dodatkowe komunkaty diagnostyczne +``` + +Plik passfile ma standardowy format .pgpass PostgreSQLa. + +Plik multisql.conf ma format JSON, np: + +```json +{ + "Passfile": "mypgpass", + "PsqlExec": "/usr/local/bin/psql", + "SqlDir": "/data/skrypty-sql", + "Defaults": { + "User": "myapp", + "Port": 5433, + "DbName": "moja-db" + }, + "Connections": [ + { + "Host": "10.20.30.01" + }, + { + "Host": "10.20.30.02", + "User": "innyuser", + "DbName": "innadb" + } + ] +} +``` + +PsqlExec jest opcjonalny - jesli nie zostanie podany wyszukuje się programu psql.exe w PATH. + +Każde połączenie w tablicy Connections może zawierać Host, Port, User i DbName. +Brakujące wartości są uzupełniane z sekcji Defaults (która ma taki sam +format jak obiekt w Connections). + +Parametry mają pierwszeństwo przed wartościami w konfiguracji. + +Format pliku passfile jest następujący: + +``` + hostname:port:database:username:password +``` + +W szczegółach opisano go na https://www.postgresql.org/docs/current/libpq-pgpass.html. + +W skryptach można korzystać ze wszystkich funkcji psqla, np: + +```sql +select true as warunek +\gset + +\if :warunek +\o ekstra.txt +select 'Warunek został spełniony!!!'; +\endif +``` + +Powyższy select (dzieki \gset) zapamięta pozyskaną wartość (w tym wypadku prymitywne true) do zmiennej warunek. + +Sekcja if / endif wykona się tylko wtedy, jeśli warunek był true i operacja `\o`, która tworzy nowy plik i resztę wyników kieruje do niego, też wykonuje się warunkowo. + +W efekcie, jeśli warunek jest spełniony, w katalogu wynikowym działania skryptu pojawi się dodatkowy plik (ekstra.txt) co pozwoli łatwo wychwycić, dla których baz ów warunek występuje.