multisql/README.txt
Rychliński Arkadiusz 80436fd01c Dodany README.md
2022-11-08 12:27:57 +01:00

111 lines
3.0 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.