Alternatywny format wyjściowy dla psql


314

Używam PostgreSQL 8.4 na Ubuntu. Mam tabeli z kolumnami c1dzięki cN. Kolumny są na tyle szerokie, że wybranie wszystkich kolumn powoduje wielokrotne zawijanie wiersza wyników zapytania. W rezultacie wynik jest trudny do odczytania.

Gdy wyniki zapytania składają się tylko z kilku wierszy, wygodnie byłoby wyświetlić wyniki zapytania tak, aby każda kolumna każdego wiersza znajdowała się w osobnej linii, np.

 c1: <value of row 1's c1>
 c2: <value of row 1's c1>
 ...
 cN: <value of row 1's cN>
 ---- some kind of delimiter ----
 c1: <value of row 2's c1>
 etc.

Korzystam z tych zapytań na serwerze, na którym wolałbym nie instalować żadnego dodatkowego oprogramowania. Czy istnieje ustawienie psql, które pozwoli mi zrobić coś takiego?

Odpowiedzi:


530

Musiałem tylko spędzić więcej czasu, wpatrując się w dokumentację. To polecenie:

\x on

zrobię dokładnie to, co chciałem. Oto kilka przykładowych danych wyjściowych:

select * from dda where u_id=24 and dda_is_deleted='f';
-[ RECORD 1 ]------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
dda_id             | 1121
u_id               | 24
ab_id              | 10304
dda_type           | CHECKING
dda_status         | PENDING_VERIFICATION
dda_is_deleted     | f
dda_verify_op_id   | 44938
version            | 2
created            | 2012-03-06 21:37:50.585845
modified           | 2012-03-06 21:37:50.593425
c_id               | 
dda_nickname       | 
dda_account_name   | 
cu_id              | 1
abd_id             | 

8
Możesz także wypróbować \ pset opakowane w formacie (dozwolone formaty nie są wyrównane, wyrównane, opakowane, HTML, lateks, troff-ms). Jeśli wyświetlacz jest wystarczająco wąski, zawinie słowo w każdej kolumnie.
Bryce

12
\xsam zmieni wartość, oszczędzając trzy naciśnięcia klawisza! (Przydatne, gdy szybko przełączasz się między szerokimi i wąskimi wyjściami).
msanford

7
Jeśli szukasz odpowiednika \Gz MySQL, spróbuj dołączyć \x\g\xna końcu zapytania lub zdefiniuj skrót ~/.psqlrcdodawania \set G '\\set QUIET 1\\x\\g\\x\\set QUIET 0', a następnie użyj na końcu :G. (zauważ brak średnika)
Sławomir Lenart

5
Czy \x onw wierszu poleceń można jakoś przekazać znak „ ” lub jego odpowiednik? Byłoby miło, gdybym mógł po prostu zapisać (na przykład używając aliasu powłoki bash), psql --somethingaby zawsze domyślnie była włączona opcja.
machineghost

2
@machineghost Use -P expanded=autoor--pset expanded=auto
alecdwm

269

(Nowe) Rozszerzony tryb automatyczny: \ x auto

Nowość w Postgresql 9.2; PSQL automatycznie dopasowuje rekordy do szerokości ekranu. wcześniej miałeś tylko włączony lub wyłączony tryb rozszerzony i musiałeś przełączać się między trybami w razie potrzeby.

  • Jeśli rekord może zmieścić się na szerokości ekranu; psql używa normalnego formatowania.
  • Jeśli rekord nie mieści się w szerokości ekranu; psql używa trybu rozszerzonego.

Aby uzyskać to użyj: \ x auto

Dokumentacja Postgresql 9.5 dotycząca komendy PSQL.


Szeroki ekran, normalne formatowanie:

 id | time  |       humanize_time             | value 
----+-------+---------------------------------+-------
  1 | 09:30 |  Early Morning - (9.30 am)      |   570
  2 | 11:30 |  Late Morning - (11.30 am)      |   690
  3 | 13:30 |  Early Afternoon - (1.30pm)     |   810
  4 | 15:30 |  Late Afternoon - (3.30 pm)     |   930
(4 rows)

Wąski ekran, rozszerzone formatowanie:

-[ RECORD 1 ]-+---------------------------
id            | 1
time          | 09:30
humanize_time | Early Morning - (9.30 am)
value         | 570
-[ RECORD 2 ]-+---------------------------
id            | 2
time          | 11:30
humanize_time | Late Morning - (11.30 am)
value         | 690
-[ RECORD 3 ]-+---------------------------
id            | 3
time          | 13:30
humanize_time | Early Afternoon - (1.30pm)
value         | 810
-[ RECORD 4 ]-+---------------------------
id            | 4
time          | 15:30
humanize_time | Late Afternoon - (3.30 pm)
value         | 930

Jak uruchomić psql z \ x auto?

Skonfiguruj \x autopolecenie podczas uruchamiania, dodając je do .psqlrcfolderu domowego i ponownie uruchamiając psql. Aby uzyskać więcej informacji, zobacz sekcję „Pliki” w dokumencie psql .

~ / .psqlrc

\x auto

70

Masz tak wiele możliwości, jak możesz się pomylić :-)? Główne elementy sterujące to:

# \pset format
# \H
# \x
# \pset pager off

Każda ma opcje i interakcje z innymi. Najbardziej automatyczne opcje to:

# \x off;\pset format wrapped
# \x auto

Nowsza opcja „\ x auto” przełącza się na wyświetlanie linia po linii tylko „w razie potrzeby”.

-[ RECORD 1 ]---------------
id          | 6
description | This is a gallery of oilve oil brands.
authority   | I love olive oil, and wanted to create a place for
reviews and comments on various types.
-[ RECORD 2 ]---------------
id          | 19
description | XXX Test A 
authority   | Testing

Starszy „zawinięty format„ pset ”jest podobny, ponieważ próbuje dobrze dopasować dane do ekranu, ale wraca do stanu niewyrównanego, jeśli nagłówki nie pasują. Oto przykład opakowania:

 id |          description           |            authority            
----+--------------------------------+---------------------------------
  6 | This is a gallery of oilve     | I love olive oil, and wanted to
    ; oil brands.                    ;  create a place for reviews and
    ;                                ;  comments on various types.
 19 | Test Test A                    | Testing

\x autoz \pset pager offjest fajny.
mitnk

\x off; \pset format wrappedi \x automają być używane razem lub są one wzajemnie się wykluczają?
Demitri

20

Interesującą rzeczą jest to, że możemy przeglądać stoły w poziomie, bez składania. możemy użyć PAGERzmiennej środowiskowej. psql z niego korzysta. możesz ustawić

export PAGER='/usr/bin/less -S'

lub po prostu, less -Sjeśli jest już dostępny w wierszu poleceń, jeśli nie we właściwej lokalizacji. -S, aby wyświetlić rozwinięte linie. możesz przekazać dowolną niestandardową przeglądarkę lub inne opcje.

Napisałem więcej w Psql Horizontal Display


1
Odpowiedź jest naprawdę dobra. Dziwi mnie, że nie jest zaznaczony wyżej. Idealny dla każdego, kto pracuje w terminalu.
LUser

To było bardzo pomocne
Merlin

Jest to przydatne, ale jak przewijasz w prawo?
Niel de Wet

18

pspg to proste narzędzie, które oferuje zaawansowane formatowanie tabeli, przewijanie w poziomie, wyszukiwanie i wiele innych funkcji.

git clone https://github.com/okbob/pspg.git
cd pspg
./configure
make
make install

następnie pamiętaj o zaktualizowaniu PAGERzmiennej np. w swoim~/.bashrc

export PAGER="pspg -s 6" 

gdzie -soznacza schemat kolorów ( 1-14). Jeśli używasz repozytoriów pgdg, po prostu zainstaluj pakiet (w dystrybucji podobnej do Debiana):

sudo apt install pspg

przykład pspg


7

Sprawdź także \ H, która włącza / wyłącza wyjście HTML. Niekoniecznie łatwy do odczytania z konsoli, ale interesujący do zrzucania do pliku (patrz \ o) lub wklejania do okna edytora / przeglądarki w celu przeglądania, szczególnie w przypadku wielu wierszy stosunkowo złożonych danych.


1

możesz użyć zenity do wyświetlenia wyniku zapytania w postaci tabeli HTML.

  • najpierw zaimplementuj skrypt bash z następującym kodem:

    cat> '/tmp/sql.op'; zenity --text-info --html --filename = '/ tmp / sql.op';

    zapisz to jak mypager.sh

  • Następnie wyeksportuj zmienną środowiskową PAGER, ustawiając pełną ścieżkę skryptu jako wartość.

    na przykład: - export PAGER = '/ path / mypager.sh'

  • Następnie zaloguj się do programu psql, a następnie uruchom polecenie \ H

  • I w końcu wykonaj dowolne zapytanie, przedstawione dane wyjściowe zostaną wyświetlone w zenity w formacie tabeli HTML.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.