Dodany README.md
This commit is contained in:
parent
b5fbe5df98
commit
80436fd01c
110
README.txt
Normal file
110
README.txt
Normal file
@ -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.
|
Loading…
Reference in New Issue
Block a user