pgrow czyli jak inaczej wyswietlić wiersz w psql
psql każdy używający postgresa znać powinien, wygodna konsola do bazy postgresql mająca masę możliwości. Niestety nie znalazłem rozwiązania jak poradzić sobie z sytuacją w której na wąskim terminalu wyświetlić trzeba wiersz tabeli mającej kilkanaście kolumn.
Próbowaliście? wygląda to m/w tak:
select * from klienci where id like '586_';
id | typ | kod | s_kat | imie | nazw | nazwa_f
| adr_ul | adr_nr | adr_miasto | adr_kodp | telefon
| tel_kom | nip | email |
uwagi
------+-----+------+-------+------------+--------------+-------------------------------
------------------------+------------------+--------+------------+----------+----------
----+---------------+---------------+-------------------------+------------------------
-------------------------------------------------------------------
5863 | i | 7340 | now | xxxxx | xxxxxxxxxxxx |
| | | | |
| xxxxxxxxx | | |
5865 | i | 7343 | now | xxxxxxx | xxxxx | xxxxxxxxxx xxxxxxxxxxx xxxxxxx
xxxxxxxxxxx x xxxxxxxx | ul. xxxx xxxxxxx | 6 | Kraków | 31-547 | xxxxxxx
| xxx xx xx fax | xxx-xx-xx-xxx | xxxxxxxxxxxxxxxxxxxxxxx | xxxxxxxxxxxxxxxxxxxxxxx
lub ogólny sekretariat....;Prawda, że piękne? Tylko szukaj tu człowieku danych... Dlatego też, zainspirowany postem Huberta Lubaczewskiego, napisałem sobie skrypt którym pragnę się podzielić, powoduje on, że wynik tego samego zapytania wygląda tak:
--------------------
id: 5863
typ: i
kod: 7340
s_kat: now
imie: xxxxx
nazw: xxxxxxxxxxxx
nazwa_f:
adr_ul:
adr_nr:
adr_miasto:
adr_kodp:
telefon:
tel_kom: xxxxxxxxx
nip:
email:
uwagi:
--------------------
id: 5865
typ: i
kod: 7343
s_kat: now
imie: xxxxxxx
nazw: xxxxx
nazwa_f: xxxxxxxxxx xxxxxxxxxxx xxxxxxx xxxxxxxxxxx x xxxxxxxx
adr_ul: ul. xxxx xxxxxxx
adr_nr: 6
adr_miasto: Kraków
adr_kodp: 31-547
telefon: xxxxxxx
tel_kom: xxx xx xx fax
nip: xxx-xx-xx-xxx
email: xxxxxxxxxxxxxxxxxxxxxxx
uwagi: xxxxxxxxxxxxxxxxxxxxxxx lub ogólny sekretariat....;
--------------------Według mnie lepiej, a Wy jak myślicie? Oto skrypt:
#!/usr/bin/perl
my $head = 0;
my $continue = 0;
while (<STDIN>) {
if (/^\(\d+ row/) {
print "-"x20 . "\n" . $_;
$head = 0;
$continue = 0;
@data = undef;
@data2 = undef;
next;
}
s/[\n\r]+$//;
if (!$head) {
@order = split /\|/;
$head = 1;
foreach $t (@order) {
$head = length($t) if length($t) > $head;
}
$head++;
next;
}
if ($continue) {
@data2 = split /\|/;
$data[$#data] .= '\n' . (shift @data2);
push @data, @data2;
} else {
@data = split /\|/, $_, -1;
}
if ($#data < $#order) {
$continue = 1;
next;
} else {
$continue = 0;
}
printf("%s\n", "-"x20);
for $i (0..$#order) {
printf("%${head}s: %s\n", $order[$i], $data[$i]);
}
}Tak go należy użyć w psql:-- włączenie unaligned output (\a) oraz przekierowania output (\o): \a \o |./pgrow.pl -- select select * from; -- wyłączenie unaligned oraz przekierowania output: \a \oMiłego używania...
Permalink
Archiwum
- Luty 2016
- Październik 2015
- Wrzesień 2015
- Lipiec 2013
- Czerwiec 2013
- Kwiecień 2013
- Marzec 2013
- Grudzień 2011
- Listopad 2011
- Lipiec 2011
- Czerwiec 2011
- Luty 2010
- Wrzesień 2009
- Marzec 2009
- Luty 2009
In English