111 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # 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.
 |