Rychliński Arkadiusz 80436fd01c Dodany README.md
2022-11-08 12:27:57 +01:00
2022-11-08 11:36:07 +01:00
2022-11-08 11:16:29 +01:00
2022-11-08 11:16:29 +01:00
2022-11-08 11:45:01 +01:00
2022-11-08 11:16:29 +01:00
2022-11-08 11:16:29 +01:00
2022-11-08 12:27:57 +01:00

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.
Description
Narzędzie do równoległego uruchamiania zestawu skryptów psql'a na wielu bazach.
Readme 55 KiB
2022-11-27 22:20:48 +01:00
Languages
Go 98.7%
Makefile 1.3%