Formato de saída alternativo para psql

316

Estou usando o PostgreSQL 8.4 no Ubuntu. Eu tenho uma tabela com colunas c1completamente cN. As colunas são largas o suficiente para que a seleção de todas as colunas faça com que uma linha de resultados da consulta seja quebrada várias vezes. Conseqüentemente, a saída é difícil de ler.

Quando os resultados da consulta constituem apenas algumas linhas, seria conveniente que eu pudesse visualizar os resultados da consulta, de modo que cada coluna de cada linha esteja em uma linha separada, por exemplo,

 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.

Estou executando essas consultas em um servidor em que prefiro não instalar nenhum software adicional. Existe uma configuração psql que me permita fazer algo assim?

user100464
fonte

Respostas:

532

Eu só precisava gastar mais tempo olhando a documentação. Este comando:

\x on

vai fazer exatamente o que eu queria. Aqui está um exemplo de saída:

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             | 
user100464
fonte
8
Você também pode tentar o formato \ pset agrupado (os formatos permitidos são desalinhados, alinhados, agrupados, html, látex, troff-ms). Se a exibição for estreita o suficiente, ela quebrará cada coluna.
Bryce
12
\xsozinho alternará o valor, economizando três pressionamentos de tecla! (Útil quando você alterna rapidamente entre saídas amplas e estreitas).
msanford
7
Se você estiver procurando pelo equivalente ao \GMysql, tente anexar \x\g\xao final da consulta ou defina o atalho na ~/.psqlrcadição \set G '\\set QUIET 1\\x\\g\\x\\set QUIET 0'e use no final :G. (nota falta de ponto e vírgula)
Sławomir Lenart
5
É possível passar de alguma forma " \x on" ou o equivalente na linha de comando? Seria bom se eu pudesse salvar (por exemplo, usando um alias do bash shell) psql --somethingpara que eu sempre tenha a opção ativada por padrão.
Machineghost
2
@machineghost Use -P expanded=autoor--pset expanded=auto
alecdwm
269

(Novo) Modo automático expandido: \ x automático

Novo no Postgresql 9.2; O PSQL ajusta automaticamente os registros à largura da tela. anteriormente, você tinha o modo expandido ativado ou desativado e precisava alternar entre os modos, conforme necessário.

  • Se o registro puder caber na largura da tela; O psql usa formatação normal.
  • Se o registro não puder caber na largura da tela; O psql usa o modo expandido.

Para obter isso, use: \ x auto

Documentação do Postgresql 9.5 no comando PSQL.


Tela ampla, formatação normal:

 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)

Tela estreita, formatação expandida:

-[ 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

Como iniciar o psql com \ x auto?

Configure o \x autocomando na inicialização, adicionando-o à .psqlrcsua pasta pessoal e reiniciando o psql. Consulte a seção 'Arquivos' no documento psql para obter mais informações .

~ / .psqlrc

\x auto
notapatch
fonte
70

Você tem tantas opções, como você pode se confundir :-)? Os principais controles são:

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

Cada um tem opções e interações com os outros. As opções mais automáticas são:

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

A opção mais recente "\ x auto" muda para a exibição linha por linha apenas "se necessário".

-[ 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

O formato \ \ pset mais antigo é semelhante ao tentar ajustar os dados perfeitamente na tela, mas volta ao desalinhado se os cabeçalhos não couberem. Aqui está um exemplo de empacotado:

 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
Bryce
fonte
\x autocom \pset pager offé uma boa.
Mitnk 27/02/19
São \x off; \pset format wrappede \x autodevem ser usados ​​juntos ou são mutuamente exclusivos?
Demitri
20

Uma coisa interessante é que podemos ver as mesas horizontalmente, sem dobrar. nós podemos usar PAGERvariáveis ​​de ambiente. O psql faz uso dele. você pode definir

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

ou apenas less -Sse já estiver disponível na linha de comando, se não estiver no local apropriado. -S para visualizar linhas desdobradas. você pode transmitir qualquer visualizador personalizado ou outras opções.

Eu escrevi mais em Psql Horizontal Display

Dineshkumar
fonte
1
A resposta é realmente boa. Estou surpreso que não esteja marcado mais alto. Perfeito para quem trabalha em um terminal.
LUser 27/02/19
Isso foi extremamente útil
Merlin #
Isso é útil, mas como você rola para a direita?
Niel de Wet
18

pspg é uma ferramenta simples que oferece formatação avançada de tabela, rolagem horizontal, pesquisa e muitos outros recursos.

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

atualize a PAGERvariável, por exemplo, no seu~/.bashrc

export PAGER="pspg -s 6" 

onde -ssignifica esquema de cores ( 1-14). Se você estiver usando repositórios pgdg, basta instalar um pacote (na distribuição semelhante ao Debian):

sudo apt install pspg

exemplo pspg

Tombart
fonte
7

Verifique também \ H, que ativa / desativa a saída HTML. Não é necessariamente fácil de ler no console, mas interessante para despejar em um arquivo (consulte \ o) ou colar em uma janela do editor / navegador para visualização, especialmente com várias linhas de dados relativamente complexos.

Wexxor
fonte
1

você pode usar o zenity para exibir a saída da consulta como tabela html.

  • primeiro implemente o script bash com o seguinte código:

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

    salve-o como mypager.sh

  • Em seguida, exporte a variável de ambiente PAGER configurando o caminho completo do script como valor.

    por exemplo: - export PAGER = '/ path / mypager.sh'

  • Em seguida, efetue login no programa psql e execute o comando \ H

  • E, finalmente, execute qualquer consulta, a saída apresentada será exibida no zenity no formato de tabela html.

purushothaman poovai
fonte