Rychliński Arkadiusz 7d9c3d8f62 feat: Dodane parsowanie pliku pgpass
pgpass jest prsowany i przy uruchomieniu psql podawane jest
wybrane hasło pasujące do połaczenia
2022-11-22 20:02:52 +01:00
2022-11-08 11:36:07 +01:00
2022-11-09 13:40:03 +01:00
2022-11-22 20:02:52 +01:00
2022-11-22 20:02:52 +01:00
2022-11-22 20:02:52 +01:00
2022-11-08 11:16:29 +01:00
2022-11-09 13:40:03 +01:00
2022-11-22 09:16:53 +01:00
2022-11-08 11:16:29 +01:00
2022-11-08 11:16:29 +01:00
2022-11-08 12:29:03 +01:00

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:

{
     "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:

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%