Todo mundo que usa psql
também usa less
pager. Que, embora funcione bem, não possui suporte especial para dados tabulares. Encontrei alguns projetos, mas nenhum era bom o suficiente para esse propósito. Assim, decidi escrever um pequeno pager especializado para usar como pager psql
.
Este pager também pode ser usado nos seguintes clientes de linha de comando:
mysql
sqlite
pgcli
monetdb
Trino (formerly Presto SQL)
usql
sqlcl
(para oracle)nushell
mcview
ou FoxPro
- http://okbob.blogspot.com/2019/12/pspg-themes-what-you-use-it.html O pspg
pode ser simplesmente instalado a partir dos repositórios Debian (Ubuntu). Os repositórios RedHat (Fedora) também contêm pspg
:
# Debian (Ubuntu)
sudo apt-get install pspg
# RedHat (Fedora)
sudo dnf install pspg
A configuração básica é muito simples - basta definir a variável de ambiente do sistema PSQL_PAGER
:
export PSQL_PAGER='pspg -X -b'
A instalação nativa no MS Windows não é suportada, mas pspg
funciona bem dentro de wsl2
. Dentro do ambiente wsl2, a instalação é igual à do sistema Linux usado.
A instalação no macOS/homebrew é simples por brew install pspg
.
[pavel@localhost ~]$ pspg --help
pspg is a Unix pager designed for table browsing.
Usage:
pspg [OPTION] [file]
General options:
--about about authors
--help show this help
-V, --version show version
--info show info about libraries and system
--direct-color force direct-color terminal mode
-f, --file=FILE open file
-F, --quit-if-one-screen
quit if content is one screen
--clipboard-app=NUM specify app used by copy to clipboard (1, 2, 3, 4)
--esc-delay=NUM specify escape delay in ms (-1 inf, 0 not used, )
--interactive force interactive mode
--ignore_file_suffix don't try to deduce format from file suffix
--ni not interactive mode (only for csv and query)
--no-watch-file don't watch inotify event of file
--no-mouse don't use own mouse handling
--no-progressive-load don't use progressive data load
--no-sigint-search-reset
without reset searching on sigint (CTRL C)
--no-sleep without waits against flickering
--no_xterm_mouse_mode don't use optional xterm mouse mode
--only-for-tables use std pager when content is not table
--on-sigint-exit exit on sigint(CTRL C or Escape)
--pgcli-fix try to fix some pgcli related issues
--querystream read queries from stream forever
--quit-on-f3 exit on F3 like mc viewers
--rr=ROWNUM rows reserved for specific purposes
--stream read input forever
-X, --reprint-on-exit preserve content after exit
Output format options:
-a, --ascii force ascii
-b, --blackwhite black-white style
-s, --style=N set color style number (0..22)
--bold-labels row, column labels use bold font
--bold-cursor cursor use bold font
--border type of borders (0..2)
--double-header header separator uses double lines
--force-uniborder replace ascii borders by unicode borders
--highlight-odd-rec highlights odd records (when it is supported by style)
--hide-header-line hides header line (between column names and data)
--ignore-short-rows rows with wrong column numbers are ignored
--null=STRING STRING used instead NULL
Searching options
-g --hlite-search, -G --HILITE-SEARCH
don't highlight lines for searches
-i --ignore-case ignore case in searches that do not contain uppercase
-I --IGNORE-CASE ignore case in all searches
Interface options:
-c, --freezecols=N freeze N columns (0..9)
--less-status-bar status bar like less pager
--line-numbers show line number column
--menu-always show top bar menu every time
--no-bars, --no-commandbar, --no-topbar
don't show bottom, top bar or both
--no-cursor row cursor will be hidden
--no-last-row-search don't use the last pattern when starting a new search
--no-scrollbar don't show scrollbar
--no-sound don't use beep when scroll is not possible
--tabular-cursor cursor is visible only when data has table format
--vertical-cursor show vertical column cursor
Input format options:
--csv input stream has csv format
--csv-separator char used as field separator
--csv-header [on/off] specify header line usage
--skip-columns-like="SPACE SEPARATED STRING LIST"
columns with substr in name are ignored
--csv-trim-width=NUM trim value after NUM chars
--csv-trim-rows=NUM trim value after NUM rows
--tsv input stream has tsv format
On exit options:
--on-exit-reset sends reset terminal sequence "33c"
--on-exit-clean sends clean terminal sequence " 33[2J"
--on-exit-erase-line sends erase line terminal sequence "33[2Kr"
--on-exit-sgr0 sends sgr0 terminal sequence " 33[0;10m"
Watch mode options:
-q, --query=QUERY execute query
-w, --watch time the query (or read file) is repeated every time (sec)
Connection options:
-d, --dbname=DBNAME database name
-h, --host=HOSTNAME database server host (default: "local socket")
-p, --port=PORT database server port (default: "5432")
-U, --username=USERNAME database user name
-W, --password force password prompt
Debug options:
--log=FILE log debug info to file
--wait=NUM wait NUM seconds to allow attach from a debugger
O pspg compartilha muitos comandos principais com o less pager ou o editor vi.
As opções também podem ser passadas dentro da variável de ambiente PSPG
. O arquivo de configuração é processado primeiro. As opções da variável PSPG
são processadas após a etapa e as opções da linha de comando são processadas no final. Uma opção pode ser processada várias vezes, o último valor vence.
Nome | Uso |
---|---|
PSPG | pode conter as mesmas opções como linha de comando |
PSPG_CONF | caminho para o arquivo de configuração |
PSPG_HISTORY | caminho para o arquivo do histórico readline do pspg |
Os nomes dos campos podem ser diferentes das opções de linha de comando relacionadas:
ascii_menu = false
bold_labels = false
bold_cursor = false
ignore_case = false
ignore_lower_case = false
no_cursor = false
no_sound = false
no_mouse = false
less_status_bar = false
no_highlight_search = false
no_highlight_lines = false
force_uniborder = false
show_rownum = false
without_commandbar = false
without_topbar = false
vertical_cursor = false
on_sigint_exit = false
no_sigint_search_reset = false
double_header = false
quit_on_f3 = false
pgcli_fix = false
xterm_mouse_mode = true
show_scrollbar = true
menu_always = false
empty_string_is_null = true
last_row_search = true
progressive_load_mode = true
highlight_odd_rec = false
hide_header_line = false
on_exit_reset = false
on_exit_clean = false
on_exit_erase_line = false
on_exit_sgr0 = false
direct_color = false
theme = 16
border_type = 2
default_clipboard_format = 0
clipboard_app = 0
hist_size = 500
esc_delay = -1
Código | Nome |
---|---|
0 | preto e branco |
1 | Comandante da meia-noite como |
2 | Gosto da FoxPro |
3 | Pdmenu como |
4 | Tema branco |
5 | vira-lata como |
6 | PCF e gostos |
7 | Tema verde |
8 | Tema azul |
9 | Palavra perfeita como |
10 | Tema azul de baixo contraste |
11 | Modo ciano/preto escuro |
12 | Paradoxo como |
13 | estilo retrô dBase IV |
14 | Estilo retro dBase IV (etiquetas Magenta) |
15 | Tema branco vermelho |
16 | Tema simples |
17 | Tema escuro solarizado |
18 | Tema de luz solarizada |
19 | Tema claro Gruvbox |
20 | Tema Tao Light |
21 | Tema FlatWhite |
22 | Tema de tubos relacionais |
23 | Tema de cor de papel |
veja http://okbob.blogspot.cz/2017/07/i-hope-so-every-who-uses-psql-uses-less.html
O tema pode ser personalizado em modelos básicos e de menu que fazem referência aos temas integrados. O arquivo do tema personalizado deve ser salvo no diretório com configuração pspg
. O nome deste arquivo deve ser .pspg_theme_xxx. O tema personalizado pode ser selecionado pela opção de linha de comando --custom-style=name
ou pelo comando ctheme name
.
Exemplo de arquivo de tema personalizado (denominado .pspg_theme_mc2
(pode ser ativado pelo comando ctheme mc2
)):
template = 1
template_menu = 3
background = black, white
data = black, white
label = black, white, italic, bold
border = #000000, white
footer = lightgray, white
cursor_data = blue, white, italic, bold, dim, reverse
cursor_border = blue, blue , italic, bold, dim, reverse
cursor_label = blue, white, italic, bold, dim, reverse
cursor_footer = blue, white, italic, bold, dim, reverse
cursor_bookmark = red, white, italic, bold, dim, reverse
cross_cursor = white, blue, italic, bold
cross_cursor_border = brightblue, blue
status_bar = black, lightgray
title = black, lightgray
scrollbar_arrows = black, white
scrollbar_background = lightgray, white
scrollbar_slider = white, gray
Algumas teclas podem ser marcadas pelo símbolo *
. Chaves marcadas são usadas para registros ímpares.
data* = black, lightgray
label* = black, lightgray, italic, bold
border* = #000000, lightgray
template
e template_menu
definem valores substitutos para quaisquer chaves não especificadas no tema personalizado. template_menu
em particular é atualmente a única maneira de personalizar a aparência do menu F9.
chave | personaliza |
---|---|
background | Cor de fundo |
data | Texto de dados (sem cabeçalho ou coluna congelada) |
border | Cor da borda |
label | Texto do rótulo (cabeçalho ou coluna congelada) |
row_number | Números de linha |
record_number | |
selected_area | |
footer | Rodapé dos resultados (não tabular, por exemplo, contagem de linhas) |
cursor_data | Texto de dados destacados (sem cabeçalho ou coluna congelada) |
cursor_border | Cor da borda destacada |
cursor_label | Texto do rótulo destacado (cabeçalho ou coluna congelada) |
cursor_row_number | Números de linha destacados |
cursor_record_number | |
cursor_selected_area | |
cursor_footer | Rodapé de resultados destacados (não tabular, por exemplo, contagem de linhas) |
scrollbar_arrows | Setas para cima e para baixo da barra de rolagem |
scrollbar_background | Fundo "vazio" da barra de rolagem |
scrollbar_slider | Controle deslizante da barra de rolagem sobre o plano de fundo |
scrollbar_active_slider | Controle deslizante da barra de rolagem capturado pelo mouse |
title | Título dos resultados (em comandos de descrição do psql) |
status_bar | Consulta principal e informações de localização do cursor |
prompt_bar | |
info_bar | Texto informativo (por exemplo, "Não encontrado" durante a pesquisa) |
input_bar | Prompt de entrada e texto (por exemplo, pesquisa) |
error_bar | |
bookmark | |
bookmark_border | |
cursor_bookmark | |
cross_cursor | Célula destacada na intersecção dos cursores horizontais e verticais |
cross_cursor_border | Bordas na interseção dos cursores horizontais e verticais |
matched_pattern | Texto de correspondência do resultado da pesquisa |
matched_pattern_nohl | |
matched_line | Linha contendo o resultado da pesquisa |
matched_line_border | Bordas na linha de resultados de pesquisa |
matched_pattern_cursor | Texto de correspondência do resultado da pesquisa em destaque |
matched_line_vertical_cursor | Texto de correspondência do resultado da pesquisa destacado verticalmente |
matched_line_vertical_cursor_border | Bordas da célula destacada verticalmente com correspondência do resultado da pesquisa |
error |
Cores ANSI Black
, Red
, Green
, Brown
, Blue
, Magenta
, Cyan
, LightGray
, Gray
, BrightRed
, BrightGreen
, Yellow
, BrightBlue
, BrightMagenta
, BrightCyan
, White
e Default
serão exibidos conforme seu emulador de terminal os configura. Como alternativa, você pode especificar valores RGB hexadecimais #FF00FF
.
Os estilos são qualquer combinação de: bold
, italic
, underline
, reverse
, standout
, dim
.
Se o formato de alguma chave não estiver correto, esta linha será ignorada. Para depuração do tema personalizado é bom iniciar pspg
com a opção --log
. Informações sobre definições quebradas são armazenadas no arquivo de log.
Chave(s) | Comando |
---|---|
0 , 1 , 2 , 3 , .., 9 | congelar as primeiras N colunas |
KEY_UP , k | navegar para trás uma linha |
KEY_DOWN , j | navegar para frente uma linha |
KEY_LEFT , h | role para a esquerda |
KEY_RIGHT , eu | role para a direita |
Ctrl + KEY_LEFT | role um caractere para a esquerda |
Ctrl + KEY_RIGHT | role um caractere para a direita |
Shift + KEY_LEFT | rolar uma coluna para a esquerda |
Shift + KEY_RIGHT | rolar uma coluna para a direita |
Ctrl + Início , g | vá para o início do arquivo |
Ctrl + Fim , G | vá para o final do arquivo |
Alt + eu | vá para o número da linha |
H | vá para a primeira linha da janela atual |
M | vá para metade da janela atual |
eu | ir para o final da janela atual |
PPAGE , Ctrl + b | para trás uma janela |
NPAGE , Ctrl + f , espaço | encaminhar uma janela |
CASA , ^ | vá para o início da linha, primeira coluna |
FIM , $ | ir para o final da linha, última coluna |
Ctrl + e | rolar uma janela para baixo |
Ctrl + y | rolar uma janela para cima |
Ctrl + d | avançar meia janela |
Ctrl + você | para trás meia janela |
é | salvar conteúdo em arquivo |
/ | procure um padrão que o levará para a próxima ocorrência |
? | procure um padrão que o levará à ocorrência anterior |
n | para a próxima partida |
N | para a próxima partida na direção inversa |
c | pesquisa de coluna |
Alt + / | procure um padrão dentro da área selecionada |
Alt + ? | pesquisa para trás por um padrão dentro da área selecionada |
Alt + c | ativar (ligar, desligar) o cursor da linha de desenho |
Alt + m | ativar (ligar, desligar) o próprio manipulador de mouse |
Alt + n | ativar (ligar, desligar) desenhar números de linha |
Alt + v , clique duas vezes no cabeçalho da coluna | ativar (ligar, desligar) o cursor da coluna de desenho |
Roda de botão do mouse | rolar verticalmente |
Alt + roda de botão do mouse | rolar horizontalmente |
F9 | mostrar menu |
q , F10 , Esc 0 | desistir |
Alt + q | sair e imprimir conteúdo bruto (não formatado) |
Alt + k , Alt + clique duplo | mudar favorito |
Alt + j | ir para o próximo favorito |
Alt + eu | ir para o favorito anterior |
Alt + o | liberar marcadores |
um | classificar ascendente |
d | classificar descendente |
você | não classificado (classificado em ordem de origem) |
Espaço | parar/continuar no modo relógio |
R | Redesenhar a tela e atualizar o arquivo de entrada |
Ins | exportar linha, coluna ou célula para o destino padrão |
shift + cursor... | definir intervalo |
F3 | início/fim das linhas de seleção |
Mudança + F3 | início/fim do bloco de seleção |
Ctrl + arrastar o mouse | define a seleção de linhas, no cabeçalho da coluna define a seleção de colunas |
Ctrl + o | mostrar a tela principal, pressione qualquer tecla para retornar ao pager novamente |
% , Ctrl + a | selecione tudo |
Comando | Descrição |
---|---|
N | vá para o número da linha |
+N | vá para N linhas adiante |
-N | vá para N linhas para trás |
N+ | vá para o número da linha |
N- | vá para o número da linha do final |
theme N | definir o número do tema |
copy [all|selected] [nullstr "str"] [csv|tsv|insert|text|pipesep|sqlvalues] | copiar dados para a área de transferência |
save [all|selected] [nullstr "str"] [csv|tsv|insert|text|pipesep|sqlvalues] | copiar dados para a área de transferência |
order [N|column name] | classificar por coluna |
orderd [N|column name] | desc classificar por coluna |
sort [N|column name] | classificar por coluna |
sortd [N|column name] | desc classificar por coluna |
dsort [N|column name] | desc classificar por coluna (alias) |
rsort [N|column name] | desc classificar por coluna (alias) |
asc [N|column name] | classificar por coluna (alias) |
desc [N|column name] | desc classificar por coluna (alias) |
search [back] [selected] [column name] [string|"string"] | string de pesquisa em dados |
A saída pode ser redirecionada para qualquer comando quando o nome começa com o símbolo de barra vertical:
copy csv | less
O pager pode ser encerrado pressionando as teclas q ou F10 ou Esc 0 . Com a opção --on-sigint-exit
o pager é fechado pressionando as teclas Ctrl + c ou Esc Esc .
pspg suporta a possibilidade de usar uma sequência de teclas Esc , key em vez de uma combinação de Alt + key . O intervalo entre pressionar Esc e a tecla é limitado pelo intervalo especificado pela opção esc-delay
ou pela opção de configuração esc_delay
. Este é o tempo máximo de atraso em ms. Após esse intervalo, o simples pressionamento de Esc é interpretado como Escape
. -1 significa ilimitado, 0 desativa esse recurso.
A pesquisa de coluna sempre não diferencia maiúsculas de minúsculas. A coluna pesquisada é marcada pelo cursor vertical. O último padrão de pesquisa de string não vazia é usado quando o padrão de pesquisa atual é uma string vazia. A pesquisa começa após a coluna vertical visível ou nas primeiras colunas visíveis não congeladas (após alguma rolagem horizontal) ou na primeira coluna. Após a última coluna, a pesquisa começa novamente.
Para suporte à área de transferência, o aplicativo da área de transferência deve ser instalado: 1. wl-clipboard (Wayland), 2. xclip (xwindows), 3. pbcopy (MacOS) ou 4. clip.exe (WSL2).
pspg
tenta traduzir o símbolo unicode '∅' para NULL todas as vezes. Se você não usar a configuração especial de pset null ...
, então psql
exibirá uma string vazia em vez de NULL. pspg
não possui nenhuma detecção especial (nas rotinas de exportação) para este caso. Você deve verificar e ativar ou desativar o item de menu Empty string is NULL
.
pspg
possui detecção automática do aplicativo da área de transferência. Infelizmente, esta detecção não deve funcionar nos mesmos casos. Você pode especificar o aplicativo especificando o número (1,2,3,4) para a opção --clipboard-app
.
Os formatos fazem a diferença! pspg copia registros no formato CSV por padrão, que usa separadores de vírgula e corta espaços em branco iniciais e finais . Use "texto formatado" para copiar exatamente o resultado da consulta ou escolha uma das outras opções disponíveis.
V: [d/d d..d]
- cursor vertical: (número da coluna)/(colunas) (posições de caracteres de) .. (posições de caracteres para)FC: d
- comprimento das colunas congeladas em caracteresC: d..d/d
- dados visíveis não congelados em caracteres (de .. a)/(total)L:[d + dd/d]
- linhas (número da primeira linha visível) + (número da linha de exibição), (linha atual)/(linhas)d%
- porcentagem de dados já exibidos Funciona bem com miller http://johnkerl.org/miller/doc/index.html
mlr --icsv --opprint --barred put '' obce.csv | pspg --force-uniborder
A nova versão integrou suporte a csv - basta usar a opção --csv
.
Pode ser integrado ao mc
/etc/mc/mc.ext
para seu ~/.config/mc directory
##csv regex/.csv Visualizar=pspg -f %f --csv
mc
pspg
no Cygwin, foi relatado algum congelamento temporário da rolagem. Nesse caso, use a opção --no-sleep
. Vejo rolagem lenta (via barra de rolagem) dentro do konsole (terminal KDE). A opção --no-sleep
também ajuda. O resultado da consulta pode ser atualizado a cada n segundos. pspg
lembra a linha do cursor, possível cursor vertical, possível ordem. A atualização deve ser pausada pressionando a tecla espaço . Pressionar repetidamente esta tecla permite atualizar novamente.
pspg
usa a API inotify quando está disponível e quando o arquivo de entrada é alterado, pspg
releia o arquivo imediatamente. Este comportamento pode ser desabilitado pela opção --no-watch-file
ou pela especificação do tempo de exibição pela opção --watch
.
pspg
pode ler um fluxo contínuo de dados tabulares de pipe, pipe nomeado ou de arquivo (com uma opção --stream
ou pode ler um fluxo de consultas de pipe ou de arquivo (com uma opção --querystream
). No modo de fluxo, apenas dados em formato de tabela podem ser processados, pois pspg
usa linha vazia como separador entre tabelas.
O modo de fluxo de consulta é uma sequência de instruções SQL separadas por char GS (separador de grupo - 0x1D em linha separada.
pavel@localhost ~]$ cat < /dev/pts/3 > ~/pipe selecione 10 ^] selecione 20 ^] selecione * de pg_class ^]
você deve adicionar ao seu perfil:
#para Postgres 10 e anteriores exportar PAGER="pspg" #para postgres 11 e mais recente exportar PSQL_PAGER="pspg" #ou "setenv PAGER pspg" para .psqlrc
e .psqlrc
definir SILENCIOSO 1 pset estilo de linha unicode pset borda 2 pset nulo ∅ desativar QUIETO
alguma configuração possível:
-- Alternar pagers com comandos :x e :xx set x '\setenv PAGER menos' set xx '\setenv PAGER 'pspg -bX --no-mouse'' :xx
LC_CTYPE
deve estar correto. Principalmente quando você usa bordas Unicode. ncurses não exibe bordas unicode (produzidas por psql
) sem a configuração correta desta variável. É possível verificar um valor 'C.UTF8'.
Quando você usa uma opção --only-for-tables
, então
PAGER
como pspg
e PSQL_PAGER
como less
ouPAGER
como less
e PSQL_PAGER
como pspg
MariaDB [sakila]> pager pspg -s 14 -X --force-uniborder --quit-if-one-screen PAGER definido como 'pspg -s 14 -X --force-uniborder --quit-if-one-screen' MariaDB [sakila]> selecione agora(); MariaDB [sakila]> selecione * do limite de nicer_but_slower_film_list 100;
O cliente nativo SQLite não produz uma saída bem formatada, mas pode ser forçado a gerar o formato CSV - e esse formato é bem legível para pspg
sqlite3 -csv -header testdb.db 'select * from foo2' | pspg --csv --csv-header=on --double-header
O pgcli precisa das seguintes opções de configuração ( ~/.config/pgcli/config
):
pager = /usr/bin/pspg --csv --rr=2 --quit-if-one-screen --ignore-case --csv-header on --pgcli-fix
table_format = csv
A versão mais antiga do pgcli tinha saída muito lenta em formato tabular. Uma solução alternativa foi usar o formato csv. Isso não deveria ser necessário nas versões atuais quando o problema de desempenho foi corrigido. Uma opção --pgcli-fix
corrigiu a importação do formato csv parcialmente quebrado gerado por pgcli
. A versão moderna do pgcli
não precisa do formato csv e não precisa da opção --pgcli-fix
.
pager = /usr/bin/pspg --rr=2 --quit-if-one-screen --ignore-case
Como sqlcl
atualmente não oferece suporte direto a uma opção de pager, você pode usar uma ferramenta como qsh para solucionar esse problema ou usar o script pspg.sql deste repositório.
Para usar o script, inicie sqlcl
conforme mostrado abaixo (é importante passar os detalhes do seu tty atual):
$ TTY=$(tty) sqlcl system/system @/path/to/pspg.sql
Agora você pode receber os resultados de uma consulta enviada ao pspg
assim:
SQL> pspg select * from user_tables;
O pspg
suporta os padrões table_mode
: rounded
e table_mode
: heavy
.
A conversão para csv também pode ser usada.
sys | get cpu | to csv | pspg --csv
Nota: footer_mode
deve estar desabilitado
configuração nushell:
$env.config.footer_mode = never
$env.config.table.header_on_separator = false
$env.config.ls.clickable_links = false
$env.config.table.mode = rounded
pspg tenta usar o modo de mouse xterm 1002, quando terminal e ncurses não são muito antigos. Se houver problemas com o uso - artefatos visuais indesejados quando você move o mouse quando algum botão do mouse é pressionado, então 1. por favor, relate o problema (por favor, anexe o arquivo de log), 2. use uma opção --no-xterm-mouse-mode
e pspg
não tentará ativar este modo.
No meu Fedora, este terminal não exibe corretamente temas de cores verdadeiras. O problema básico está na configuração padrão TERM
, que é xterm-256color
. Infelizmente, o terminal konsole
não é totalmente compatível com xterm
e não permite alteração de cores. Você pode forçar cores diretas usando a opção --direct-color
ou configurando TERM=xterm-direct
. A segunda opção é a configuração mais correta da variável TERM
para konsole-256color
. Neste caso, o pspg
mapeará as cores RGB verdadeiras para as 256 cores suportadas.
Alguns problemas do vinculador podem ser corrigidos por:
eu mudei gcc -lncursesw pager.c -o pspg -ggdb para gcc pager.c -o pspg -ggdb -lncursesw
Se você quiser usar pspg
como cliente Postgres, então você precisa executar configure --with-postgresql=yes
. No Fedora com compilação própria do Postgres eu tive que instalar o pacote openssl-devel
e tive que definir export PKG_CONFIG_PATH="/usr/local/pgsql/master/lib/pkgconfig/"
.
No FreeBsd você deve usar gmake
em vez de make
.
Ao compilar o código do código-fonte, execute ./configure primeiro. Às vezes, ./autogen.sh primeiro
Se você deseja exibir caracteres UTF-8, pspg
deve estar vinculado à biblioteca ncursesw
. Os caracteres UTF-8 são mal exibidos quando a biblioteca ncursesw
é usada. Você também pode ver caracteres quebrados com configuração de localidade incorreta.
Você pode verificar o amplo suporte a caracteres em pspg --version
. São esperadas ncurses with wide char support
. Execute novamente configure
com a opção --with-ncursesw
. Quando este comando falhar, verifique se o pacote de desenvolvimento da biblioteca ncursesw está instalado.
# brew install pspg
Você pode compilar facilmente pspg
sem brew
, mas precisa da biblioteca gnu readline
. O MacOS usa por padrão o readline emulado sobre o libedit, mas pspg
requer a biblioteca gnu readline completa.
LDFLAGS="-L/usr/local/opt/readline/lib" CPPFLAGS="-I/usr/local/opt/readline/include" ./configure
LDFLAGS="-L/usr/local/opt/readline/lib" CPPFLAGS="-I/usr/local/opt/readline/include" make
# apt-cache search pspg
# apt-get install pspg
# dnf install pspg
O pspg está disponível no repositório da comunidade https://yum.postgresql.org/packages.php
# apk add pspg
# emerge -av dev-db/pspg
O Arch User Repository contém duas versões:
master
. Use o auxiliar AUR de sua escolha ou git e makepkg
para instalar o pspg.
# pkg install pspg
# pkg_add pspg
Mais sobre isso
# port install pspg
pspg
pode ser usado simplesmente no MS Windows usando wsl2. Eu testei e está funcionando sem problemas.
No terminal execute wsl --install -d Ubuntu-22.04
No terminal, abra a sessão do Ubuntu
sudo apt-get update
sudo apt-get install pspg
sudo apt-get install postgresql postgresql-contrib
# set password for user postgres
sudo passwd postgres
su - postgres
psql postgres
>> create role pavel login;
q
exit
touch ~/.psqlrc
mcedit .psqlrc
pset linestyle unicode
pset border 2
setenv PSQL_PAGER 'pspg -b -X'
# press F2 and F10
psql postgres
não há diferença entre instalação e trabalho no Ubuntu (Debian)
pspg
ainda não foi portado para MS Windows. Existe a dependência de ncurses e da função newterm
implementada corretamente (totalmente) ( pdcurses
faz isso apenas em plataformas Unix). Talvez funcione com WSL2 (não testei). Uma alternativa pode ser usar less
pager, que é portado para alguns ambientes MS Win. less
depende de termcap
e é um pouco mais portátil que pspg
( termcal
é a camada baixa de ncurses). less
suporta linhas fixas e com a opção --chop-long-lines
ou apenas -S
pode ser usado como pager para pspg
.
export PSQL_PAGER="less --chop-long-lines --header 1"
Existem alguns problemas que exigem alterações manuais de código para uma compilação bem-sucedida - testamos pspg
com sucesso, mas embora pspg
estivesse vinculado às bibliotecas ncursesw, o suporte à codificação utf8 não funcionou totalmente corretamente - provavelmente devido a alguns problemas na biblioteca libc
. Existem problemas com caracteres codificados em 3 bytes - bordas unicode, .. Caracteres unicode de dois bytes devem ser bem exibidos.
Você pode usar pspg
com caracteres acentuados usuais, mas bordas unicode não devem ser usadas. A substituição de bordas ascii por caracteres de bordas especiais (pela tecnologia ncurses) funciona bem - veja a opção Options|Force unicode borders
.
Solaris make
não suporta instruções condicionais - deve ser removido Portanto, remova a funcionalidade não suportada do Makefile
( ifdef
, endif
), substitua -include
por include
primeiro.
Depois de executar configure
remova o link na biblioteca termcap
de config.make
. É lixo produzido pelo script readline
automake. A combinação com bibliotecas ncurses
causa alguns problemas de vinculação.
export CURSES_CFLAGS="-I/usr/include/ncurses/"
export PANEL_LIBS="-lpanelw"
./configure
export CFLAGS="-m64 -I/opt/csw/include"
export LDFLAGS="-L/opt/csw/lib/64 -R/opt/csw/lib/64"
export PKG_CONFIG_PATH="/opt/csw/lib/64/pkgconfig"
./configure
Armazene dados em algum formato de coluna (agora os dados são armazenados como uma matriz de linhas). Com esta alteração é possível operar sobre colunas - ocultar colunas, alterar largura, iteração cíclica sobre colunas, alterar ordem de colunas, marcar colunas e exportar apenas colunas selecionadas (linhas selecionadas).
Substitua a impressão do documento diretamente na janela do ncurses por alguma estrutura mais inteligente. Internamente, há muitas verificações e correções para oferecer suporte a layouts dinâmicos complexos. As possíveis visualizações devem lembrar a primeira linha, a última linha e a linha atual. Agora, esses dados estão em variáveis globais ou em estruturas DataDesc e ScrDesc.
Este projeto usa a biblioteca st_menu - implementação da barra de menu CUA e menu suspenso para ncurses https://github.com/okbob/ncurses-st-menu
Se gostar, envie um postal do seu país de origem para o meu endereço, por favor:
Pavel Stehule
Skalice 12
256 01 Benesov u Prahy
Czech Republic
Convido quaisquer perguntas, comentários, relatórios de bugs, patches no endereço de e-mail [email protected]