w swojej pracy często muszę korzystać ze zdalnych baz danych.
to oznacza, że mam pewien “problem".
muszę albo:
- zapamiętać wszystkie opcje do połączenia do każdej bazy
- porobić aliasy/jednolinijkowce do łączenia do baz
- przerzucić się z ulubionego psql'a do czegoś typu pgadmin
- napisać coś własnego
opcja 1 – odpada. z paru powodów. głównym jest lenistwo. dodatkowo rozwala mnie fakt iż mam na dysku postgresa 8.2 (z cvs'u) i to jego psql jest domyślny. a łączę się do baz 8.1, 8.0 czy 7.4. a psql z wersją postgresa powinien być zgodny. więc musiałbym jeszcze pamiętać który psql do której bazy. tragedia.
opcja 2 – aliasy – no, może i by się dało, ale ani to proste ani miłe, ani przesadnie skalowalne.
opcja 3 – odpada. graficzne toole do baz danych mają jedną wspólną cechę: wkurzają mnie.
pozostała więc opcja 4.
pomyślałem, pokombinowałem i napisałem skrypcik “sql“. a jak napisałem to i udostępnię – może się jeszcze komuś nada.
skrypcik jest w perlu. wymaga kilku niestandardowych bibliotek:
- Readonly
- IO::Prompt
- IO::All
zakłada on, że w katalogu domowym w podkatalogu .sql-profiles będą pliki *.conf o takiej budowie:
user=cos database=cosmix host=db123.internal port=5811 psql=/usr/bin/psql
opcje te służą do uruchomienia psql'a w odpowiedni sposób. no i odpowiedniego psql'a (jak nie podam psql=…, to sql uruchomi domyślnego psql'a).
jak to działa.
odpalam: sql
i dostaję menu z listą konfiguracji. wybieram jedną i sql wykonuje “exec" na odpowiedniego psql'a z odpowiednimi parametrami.
co więcej. załóżmy, że mam 2 konfigi: cos.conf i ble.conf. wystarczy, że napiszę: sql c i sql automatycznie załaduje cos.conf (technicznie – sprawdza czy jest tylko 1 takie plik konfiguracyjny którego nazwa zaczyna się od parametru jaki podano).
inne parametry są przekazywane do psql'a.
więc mogę np.:
SQL b -c "select version()"
co połączy mnie z bazą zapisaną w ble.conf i wykona polecenie (switch -c, oraz “select version()" zostaną przekazane do psql'a).
oczywiście do tego używam pliku .pgpass, ale to raczej oczywiste 🙂
tak więc – jeśli aby się połączyć z bazą musicie podac jakies parametry – może użyjcie sql'a (programu) – da się parametry skrócić nawet do jednego znaku 🙂