Tous ceux qui utilisent psql
utilisent également le less
pager. Ce qui, même s’il fonctionne bien, ne prend pas en charge les données tabulaires. J'ai trouvé quelques projets, mais aucun n'était assez bon à cet effet. J'ai donc décidé d'écrire un petit pager spécialisé à utiliser comme pager psql
.
Ce téléavertisseur peut également être utilisé à partir des clients de ligne de commande suivants :
mysql
sqlite
pgcli
monetdb
Trino (formerly Presto SQL)
usql
sqlcl
(pour Oracle)nushell
mcview
ou FoxPro
- http://okbob.blogspot.com/2019/12/pspg-themes-what-you-use-it.html Le pspg
peut être simplement installé à partir des référentiels Debian (Ubuntu). Les référentiels RedHat (Fedora) contiennent également pspg
:
# Debian (Ubuntu)
sudo apt-get install pspg
# RedHat (Fedora)
sudo dnf install pspg
La configuration de base est très simple - définissez simplement la variable d'environnement système PSQL_PAGER
:
export PSQL_PAGER='pspg -X -b'
L'installation native sur MS Windows n'est pas prise en charge, mais pspg
fonctionne bien dans wsl2
. Dans l'environnement wsl2, l'installation est la même que sur le système Linux utilisé.
L'installation sur macOS/homebrew est simple par 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
pspg partage de nombreux raccourcis clavier avec le less pager ou l'éditeur vi.
Les options peuvent également être transmises dans la variable d'environnement PSPG
. Le fichier de configuration est traité en premier. Les options de la variable PSPG
sont traitées après l'étape et les options de ligne de commande sont traitées à la fin. Une option peut être traitée plusieurs fois, la dernière valeur l'emporte.
Nom | Usage |
---|---|
PSPG | peut contenir les mêmes options que la ligne de commande |
PSPG_CONF | chemin d'accès au fichier de configuration |
PSPG_HISTORY | chemin d'accès au fichier d'historique de lecture de pspg |
Les noms des champs peuvent être différents de ceux des options de ligne de commande associées :
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
Code | Nom |
---|---|
0 | noir et blanc |
1 | Commandant de minuit comme |
2 | FoxPro aime |
3 | Pdmenu j'aime |
4 | Thème blanc |
5 | Caoutchouc comme |
6 | PCFet j'aime |
7 | Thème vert |
8 | Thème bleu |
9 | Mot parfait comme |
10 | Thème bleu à faible contraste |
11 | Mode cyan foncé/noir |
12 | Un paradoxe comme |
13 | Style rétro dBase IV |
14 | Style rétro dBase IV (étiquettes magenta) |
15 | Thème rouge blanc |
16 | Thème simple |
17 | Thème sombre solarisé |
18 | Thème de lumière solarisée |
19 | Thème lumineux Gruvbox |
20 | Thème Tao Lumière |
21 | Thème FlatWhite |
22 | Thème des pipes relationnelles |
23 | Thème Couleur du papier |
voir http://okbob.blogspot.cz/2017/07/i-hope-so-every-who-uses-psql-uses-less.html
Le thème peut être personnalisé sur des modèles de base et de menu faisant référence aux thèmes intégrés. Le fichier de thème personnalisé doit être enregistré dans le répertoire avec la configuration pspg
. Le nom de ce fichier doit être .pspg_theme_xxx. Le thème personnalisé peut être sélectionné par l'option de ligne de commande --custom-style=name
ou par la commande ctheme name
.
Exemple de fichier de thème personnalisé (nommé .pspg_theme_mc2
(il peut être activé par la commande 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
Certaines touches peuvent être marquées par le symbole *
. Les clés marquées sont utilisées pour les enregistrements impairs.
data* = black, lightgray
label* = black, lightgray, italic, bold
border* = #000000, lightgray
template
et template_menu
définissent des valeurs de secours pour toutes les clés non spécifiées dans le thème personnalisé. template_menu
en particulier est actuellement le seul moyen de personnaliser l'apparence du menu F9.
clé | personnalise |
---|---|
background | Couleur de fond |
data | Texte de données (sans en-tête ou colonne gelée) |
border | Couleur de la bordure |
label | Texte de l'étiquette (en-tête ou colonne gelée) |
row_number | Numéros de ligne |
record_number | |
selected_area | |
footer | Pied de page des résultats (non tabulaire, par exemple, nombre de lignes) |
cursor_data | Texte de données en surbrillance (sans en-tête ou colonne gelée) |
cursor_border | Couleur de la bordure en surbrillance |
cursor_label | Texte de l'étiquette en surbrillance (en-tête ou colonne figée) |
cursor_row_number | Numéros de ligne en surbrillance |
cursor_record_number | |
cursor_selected_area | |
cursor_footer | Pied de page des résultats en surbrillance (non tabulaire, par exemple, nombre de lignes) |
scrollbar_arrows | Flèches haut et bas de la barre de défilement |
scrollbar_background | Arrière-plan "vide" de la barre de défilement |
scrollbar_slider | Curseur de la barre de défilement sur l'arrière-plan |
scrollbar_active_slider | Curseur de la barre de défilement saisi par la souris |
title | Titre des résultats (dans les commandes de description psql) |
status_bar | Principales requêtes et informations sur l'emplacement du curseur |
prompt_bar | |
info_bar | Texte d'information (par exemple "Introuvable" lors de la recherche) |
input_bar | Invite de saisie et texte (par exemple, recherche) |
error_bar | |
bookmark | |
bookmark_border | |
cursor_bookmark | |
cross_cursor | Cellule en surbrillance à l'intersection des curseurs horizontaux et verticaux |
cross_cursor_border | Bordures à l'intersection des curseurs horizontaux et verticaux |
matched_pattern | Le résultat de la recherche correspond au texte |
matched_pattern_nohl | |
matched_line | Ligne contenant le résultat de la recherche |
matched_line_border | Bordures dans la ligne des résultats de recherche |
matched_pattern_cursor | Le résultat de recherche en surbrillance correspond au texte |
matched_line_vertical_cursor | Texte de correspondance des résultats de recherche mis en évidence verticalement |
matched_line_vertical_cursor_border | Bordures de la cellule en surbrillance verticale avec correspondance des résultats de recherche |
error |
Les couleurs ANSI Black
, Red
, Green
, Brown
, Blue
, Magenta
, Cyan
, LightGray
, Gray
, BrightRed
, BrightGreen
, Yellow
, BrightBlue
, BrightMagenta
, BrightCyan
, White
et Default
s'afficheront lorsque votre émulateur de terminal les configurera. Alternativement, vous pouvez spécifier des valeurs RVB hexadécimales #FF00FF
.
Les styles peuvent être n'importe quelle combinaison de : bold
, italic
, underline
, reverse
, standout
, dim
.
Si le format d'une clé n'est pas correct, cette ligne est ignorée. Pour le débogage du thème personnalisé, il est bon de démarrer pspg
avec l'option --log
. Les informations sur les définitions brisées sont stockées dans le fichier journal.
Clé(s) | Commande |
---|---|
0 , 1 , 2 , 3 , .., 9 | geler les N premières colonnes |
KEY_UP , k | reculer d'une ligne |
KEY_DOWN , j | avancer d'une ligne |
CLÉ_GAUCHE , h | faire défiler vers la gauche |
KEY_RIGHT , je | faire défiler vers la droite |
Ctrl + KEY_LEFT | faire défiler un caractère vers la gauche |
Ctrl + KEY_RIGHT | faire défiler un caractère vers la droite |
Maj + KEY_LEFT | faire défiler une colonne vers la gauche |
Maj + KEY_RIGHT | faire défiler une colonne vers la droite |
Ctrl + Accueil , g | aller au début du fichier |
Ctrl + Fin , G | aller à la fin du fichier |
Alt + l | aller au numéro de ligne |
H | aller à la première ligne de la fenêtre actuelle |
M. | aller à la moitié de la fenêtre actuelle |
L | aller à la fin de la fenêtre actuelle |
PPAGE , Ctrl + b | reculer d'une fenêtre |
NPAGE , Ctrl + f , espace | avancer d'une fenêtre |
MAISON , ^ | aller au début de la ligne, première colonne |
FIN , $ | aller à la fin de la ligne, dernière colonne |
Ctrl + e | faire défiler une fenêtre vers le bas |
Ctrl + y | faire défiler une fenêtre vers le haut |
Ctrl + d | avancer d'une demi-fenêtre |
Ctrl + u | reculer d'une demi-fenêtre |
s | enregistrer le contenu dans un fichier |
/ | recherchez un modèle qui vous mènera à l'occurrence suivante |
? | rechercher un modèle qui vous amènera à l'occurrence précédente |
n | pour le prochain match |
N | pour le prochain match en sens inverse |
c | recherche de colonne |
Alt + / | rechercher un motif dans la zone sélectionnée |
Alt + ? | recherche en arrière d'un motif à l'intérieur de la zone sélectionnée |
Alt + c | activer (activer, désactiver) le curseur de la ligne de dessin |
Alt + m | allumer (allumer, éteindre) son propre gestionnaire de souris |
Alt + n | activer (activer, désactiver) les numéros de lignes de dessin |
Alt + v , double-cliquez sur l'en-tête de la colonne | activer (activer, désactiver) le curseur de la colonne de dessin |
Molette des boutons de la souris | faire défiler verticalement |
Alt + molette des boutons de la souris | faire défiler horizontalement |
F9 | afficher le menu |
q , F10 , Échap 0 | quitter |
Alt + q | quitter et imprimer le contenu brut (non formaté) |
Alt + k , Alt + double-clic | changer de signet |
Alt + j | aller au signet suivant |
Alt + je | aller au favori précédent |
Alt + o | marque-pages affleurants |
un | trier par ordre croissant |
d | trier par ordre décroissant |
toi | non trié (trié par ordre d'origine) |
Espace | arrêter/continuer en mode montre |
R. | Repeindre l'écran et actualiser le fichier d'entrée |
Ins | exporter une ligne, une colonne ou une cellule vers la cible par défaut |
Maj + curseur... | définir la plage |
F3 | début/fin des lignes de sélection |
Maj + F3 | début/fin du bloc de sélection |
Ctrl + faites glisser la souris | définit la sélection des lignes, sur l'en-tête de colonne définit la sélection des colonnes |
Ctrl + o | afficher l'écran principal, appuyer sur n'importe quelle touche pour revenir à nouveau au téléavertisseur |
% , Ctrl + a | tout sélectionner |
Commande | Description |
---|---|
N | aller au numéro de ligne |
+N | aller aux N lignes en avant |
-N | aller à N lignes en arrière |
N+ | aller au numéro de ligne |
N- | aller au numéro de ligne à partir de la fin |
theme N | définir le numéro du thème |
copy [all|selected] [nullstr "str"] [csv|tsv|insert|text|pipesep|sqlvalues] | copier les données dans le presse-papiers |
save [all|selected] [nullstr "str"] [csv|tsv|insert|text|pipesep|sqlvalues] | copier les données dans le presse-papiers |
order [N|column name] | trier par colonne |
orderd [N|column name] | desc trier par colonne |
sort [N|column name] | trier par colonne |
sortd [N|column name] | desc trier par colonne |
dsort [N|column name] | desc trier par colonne (alias) |
rsort [N|column name] | desc trier par colonne (alias) |
asc [N|column name] | trier par colonne (alias) |
desc [N|column name] | desc trier par colonne (alias) |
search [back] [selected] [column name] [string|"string"] | chaîne de recherche dans les données |
La sortie peut être redirigée vers n'importe quelle commande dont le nom commence par le symbole barre :
copy csv | less
Le téléavertisseur peut être terminé en appuyant sur les touches q ou F10 ou Esc 0 . Avec l'option --on-sigint-exit
alors le pager est fermé en appuyant sur les touches Ctrl + c ou Esc Esc .
pspg prend en charge la possibilité d'utiliser une séquence de touches Esc , key à la place d'une combinaison Alt + key . L'intervalle entre les pressions sur Esc et la touche est limité par l'intervalle spécifié par l'option esc-delay
ou par l'option de configuration esc_delay
. Il s'agit du temps de retard maximum en ms. Après cet intervalle, la simple pression sur Esc est interprétée comme Escape
. -1 signifie illimité, 0 désactive cette fonctionnalité.
La recherche dans les colonnes ne respecte pas la casse à chaque fois. La colonne recherchée est marquée par un curseur vertical. Le dernier modèle de recherche de chaîne non vide est utilisé lorsque le modèle de recherche actuel est une chaîne vide. La recherche commence après la colonne verticale visible ou sur les premières colonnes visibles non figées (après un défilement horizontal) ou sur la première colonne. Après la dernière colonne, la recherche recommence à partir de la première.
Pour la prise en charge du presse-papiers, l'application presse-papiers doit être installée : 1. wl-clipboard (Wayland), 2. xclip (xwindows), 3. pbcopy (MacOS) ou 4. clip.exe (WSL2).
pspg
essaie de traduire le symbole Unicode '∅' en NULL à chaque fois. Si vous n'utilisez pas de paramètre spécial par pset null ...
, alors psql
affiche une chaîne vide à la place de NULL. pspg
n'a pas de détection spéciale (dans les routines d'exportation) pour ce cas. Vous devez vérifier et activer ou désactiver l'élément de menu Empty string is NULL
.
pspg
a une détection automatique de l'application du presse-papiers. Malheureusement, cette détection ne devrait pas fonctionner dans les mêmes cas. Vous pouvez spécifier l'application en spécifiant le numéro (1,2,3,4) dans l'option --clipboard-app
.
Les formats font la différence ! pspg copie les enregistrements au format CSV par défaut, qui utilise des séparateurs par virgules et supprime les espaces initiaux et de fin . Utilisez « texte formaté » pour copier exactement le résultat de la requête ou choisissez l'une des autres options disponibles.
V: [d/d d..d]
- curseur vertical : (numéro de colonne)/(colonnes) (positions de caractères à partir de) .. (positions de caractères à)FC: d
- longueur des colonnes figées en caractèresC: d..d/d
- données visibles non gelées en caractères (de .. à)/(total)L:[d + dd/d]
- lignes (numéro de la première ligne visible) + (numéro de ligne d'affichage), (ligne actuelle)/(lignes)d%
- pourcentage des données déjà affichées Cela fonctionne bien avec Miller http://johnkerl.org/miller/doc/index.html
mlr --icsv --opprint --barred put '' obce.csv | pspg --force-uniborder
La nouvelle version intègre le support CSV - utilisez simplement l'option --csv
.
Il peut être intégré à mc
/etc/mc/mc.ext
vers votre ~/.config/mc directory
##csv expression régulière/.csv Vue=pspg -f %f --csv
mc
pspg
sur Cygwin, un gel temporaire du défilement a été signalé. Dans ce cas, veuillez utiliser une option --no-sleep
. Je vois un défilement lent (via la barre de défilement) dans la console (terminal KDE). L'option --no-sleep
aide également. Le résultat de la requête peut être actualisé toutes les n secondes. pspg
se souvient de la ligne du curseur, du curseur vertical possible, de l'ordre possible. L'actualisation doit être interrompue en appuyant sur la touche espace . Un appui répété sur cette touche permet de rafraîchir à nouveau.
pspg
utilise l'API inotify lorsqu'elle est disponible et lorsque le fichier d'entrée est modifié, pspg
relit immédiatement le fichier. Ce comportement peut être désactivé par l'option --no-watch-file
ou par la spécification de l'heure de surveillance par l'option --watch
.
pspg
peut lire un flux continu de données tabulaires à partir d'un tube, d'un tube nommé ou d'un fichier (avec l'option --stream
ou il peut lire un flux de requêtes à partir d'un tube ou d'un fichier (avec l'option --querystream
). En mode flux, seules les données au format tableau peuvent être traitées, car pspg
utilise une ligne vide comme séparateur entre les tableaux.
Le mode flux de requêtes est une séquence d'instructions SQL séparées par char GS (séparateur de groupe - 0x1D sur une ligne séparée.
pavel@localhost ~]$ chat < /dev/pts/3 > ~/pipe sélectionnez 10 ^] sélectionnez 20 ^] sélectionner * depuis pg_classe ^]
vous devez ajouter à votre profil :
#pour Postgres 10 et versions antérieures exporter PAGER="pspg" #pour postgres 11 et plus récent exporter PSQL_PAGER="pspg" #ou "setenv PAGER pspg" vers .psqlrc
et .psqlrc
set CALME 1 pset style de ligne unicode pset bordure 2 pset nul ∅ unset SILENCIEUX
quelques configurations possibles :
-- Changer de pager avec les commandes :x et :xx set x '\setenv PAGER moins' set xx '\setenv PAGER 'pspg -bX --no-mouse'' :xx
LC_CTYPE
devrait être correct. Principalement lorsque vous utilisez des bordures Unicode. ncurses n'affiche pas les bordures Unicode (produites par psql
) sans réglage correct de cette variable. Il est possible de vérifier une valeur 'C.UTF8'.
Lorsque vous utilisez une option --only-for-tables
, alors
PAGER
sur pspg
et PSQL_PAGER
sur less
ouPAGER
sur less
et PSQL_PAGER
sur pspg
MariaDB [sakila]> pager pspg -s 14 -X --force-uniborder --quit-if-one-screen PAGER défini sur 'pspg -s 14 -X --force-uniborder --quit-if-one-screen' MariaDB [sakila]> sélectionner maintenant (); MariaDB [sakila]> sélectionnez * dans la limite nicer_but_slower_film_list 100 ;
Le client natif SQLite ne produit pas de sortie bien formatée, mais peut être forcé de générer le format CSV - et ce format est bien lisible pour pspg
sqlite3 -csv -header testdb.db 'select * from foo2' | pspg --csv --csv-header=on --double-header
pgcli a besoin des options de configuration suivantes ( ~/.config/pgcli/config
) :
pager = /usr/bin/pspg --csv --rr=2 --quit-if-one-screen --ignore-case --csv-header on --pgcli-fix
table_format = csv
L'ancienne version de pgcli avait une sortie très lente au format tabulaire. Une solution de contournement utilisait le format csv. Cela ne devrait pas être nécessaire sur les versions actuelles une fois le problème de performances résolu. Une option --pgcli-fix
a corrigé l'importation du format csv partiellement cassé généré par pgcli
. La version moderne de pgcli
n'a pas besoin du format csv et n'a pas besoin de l'option --pgcli-fix
.
pager = /usr/bin/pspg --rr=2 --quit-if-one-screen --ignore-case
Comme sqlcl
ne prend actuellement pas en charge directement une option de pager, vous pouvez soit utiliser un outil comme qsh pour contourner ce problème, soit utiliser le script pspg.sql de ce référentiel.
Pour utiliser le script, démarrez sqlcl
comme indiqué ci-dessous (il est important de transmettre les détails de votre terminal actuel) :
$ TTY=$(tty) sqlcl system/system @/path/to/pspg.sql
Vous pouvez maintenant avoir les résultats d'une requête envoyée à pspg
comme ceci :
SQL> pspg select * from user_tables;
Le pspg
prend en charge par défaut table_mode
: rounded
et table_mode
: heavy
.
La conversion en CSV peut également être utilisée.
sys | get cpu | to csv | pspg --csv
Remarque : footer_mode
doit être désactivé
configuration 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 essaie d'utiliser le mode souris xterm 1002, lorsque le terminal et les ncurses ne sont pas trop anciens. S'il y a des problèmes d'utilisation - des artefacts visuels indésirables lorsque vous déplacez la souris lorsqu'un bouton de la souris est enfoncé, alors 1. veuillez signaler le problème (veuillez joindre un fichier journal), 2. utilisez une option --no-xterm-mouse-mode
et pspg
n’essaiera pas d’activer ce mode.
Sur mon Fedora, ce terminal n'affiche pas correctement les vrais thèmes de couleurs. Le problème fondamental réside dans le paramètre TERM
par défaut, c'est-à-dire xterm-256color
. Malheureusement, le terminal konsole
n'est pas entièrement compatible avec xterm
et ne permet pas le changement de couleur. Vous pouvez forcer les couleurs directes en utilisant l'option --direct-color
ou en définissant TERM=xterm-direct
. La deuxième option est un réglage plus correct de la variable TERM
sur konsole-256color
. Dans ce cas, le pspg
mappera les vraies couleurs RVB aux 256 couleurs prises en charge.
Certains problèmes de l'éditeur de liens peuvent être résolus par :
j'ai changé gcc -lncursesw pager.c -o pspg -ggdb à gcc pager.c -o pspg -ggdb -lncursesw
Si vous souhaitez utiliser pspg
comme client Postgres, vous devez alors exécuter configure --with-postgresql=yes
. Sur Fedora avec ma propre version de Postgres, j'ai dû installer le package openssl-devel
et j'ai dû définir export PKG_CONFIG_PATH="/usr/local/pgsql/master/lib/pkgconfig/"
.
Sur FreeBsd, vous devriez utiliser gmake
à la place make
.
Lorsque vous compilez du code à partir des sources, exécutez d'abord ./configure. Parfois ./autogen.sh en premier
Si vous souhaitez afficher des caractères UTF-8, alors pspg
doit être lié à la bibliothèque ncursesw
. Les caractères UTF-8 ne s'affichent pas correctement lorsque la bibliothèque ncursesw
est utilisée. Vous pouvez également voir des caractères cassés avec des paramètres régionaux incorrects.
Vous pouvez vérifier la prise en charge des caractères larges par pspg --version
. ncurses with wide char support
sont attendues. Réexécutez configure
avec l'option --with-ncursesw
. Lorsque cette commande échoue, vérifiez si le package de développement pour la bibliothèque ncursesw est installé.
# brew install pspg
Vous pouvez compiler facilement pspg
sans brew
, mais vous avez besoin de la bibliothèque gnu readline
. MacOS utilise par défaut readline émulé sur libedit, mais pspg
nécessite la bibliothèque GNU readline complète.
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
Le pspg est disponible depuis le référentiel communautaire https://yum.postgresql.org/packages.php
# apk add pspg
# emerge -av dev-db/pspg
Le référentiel d'utilisateurs Arch contient deux versions :
master
. Utilisez l'assistant AUR de votre choix ou git et makepkg
pour installer pspg.
# pkg install pspg
# pkg_add pspg
En savoir plus
# port install pspg
pspg
peut être simplement utilisé sur MS Windows en utilisant wsl2. Je l'ai testé et il fonctionne sans problème.
Dans le terminal, exécutez wsl --install -d Ubuntu-22.04
Dans le terminal, ouvrez la session 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
il n'y a aucune différence entre l'installation et le travail sur Ubuntu (Debian)
pspg
n'est pas encore porté sur MS Windows. Il existe une dépendance à l'égard de ncurses et de la fonction newterm
correctement (entièrement) implémentée ( pdcurses
ne le fait que sur les plates-formes Unix). Cela peut peut-être fonctionner avec WSL2 (je ne l'ai pas testé). Une alternative peut consister à utiliser less
de téléavertisseur, porté sur certains environnements MS Win. less
dépend de termcap
, et il est un peu plus portable que pspg
( termcal
est une couche faible de ncurses). less
prend en charge les lignes fixes et avec l'option --chop-long-lines
ou simplement -S
peut être utilisé comme pager pour pspg
.
export PSQL_PAGER="less --chop-long-lines --header 1"
Il y a quelques problèmes qui nécessitent des modifications manuelles du code pour une compilation réussie - nous avons testé pspg
avec succès, mais bien que pspg
soit lié aux bibliothèques ncursesw, la prise en charge de l'encodage utf8 ne fonctionnait pas entièrement correctement - probablement en raison de problèmes dans la bibliothèque libc
. Il y a des problèmes avec les caractères codés sur 3 octets - bordures Unicode, .. Les caractères Unicode de deux octets devraient être bien affichés.
Vous pouvez utiliser pspg
avec les caractères accentués habituels, mais les bordures Unicode ne doivent pas être utilisées. Le remplacement des bordures ascii par des caractères de bordure spéciaux (par la technologie ncurses) fonctionne bien - regarde l'option Options|Force unicode borders
.
Solaris make
ne prend pas en charge les instructions conditionnelles - doit être supprimé. Supprimez donc les fonctionnalités non prises en charge de Makefile
( ifdef
, endif
), remplacez d'abord -include
par include
.
Après avoir exécuté configure
supprimez le lien sur la bibliothèque termcap
de config.make
. Ce sont des déchets produits par le script readline
automake. La combinaison avec les bibliothèques ncurses
pose des problèmes de liaison.
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
Stockez les données dans un format de colonne (les données sont désormais stockées sous forme de tableau de lignes). Avec ce changement, il est possible d'opérer sur les colonnes - masquer les colonnes, modifier la largeur, itération cyclique sur les colonnes, modifier l'ordre des colonnes, marquer les colonnes et exporter uniquement les colonnes sélectionnées (lignes sélectionnées).
Remplacez le document d'impression directement dans la fenêtre ncurses par une structure plus intelligente. En interne, il existe de nombreuses vérifications et correctifs pour prendre en charge une mise en page dynamique complexe. Les vues éventuelles doivent mémoriser la première ligne, la dernière ligne et la ligne actuelle. Désormais, ces données sont dans des variables globales ou dans des structures DataDesc et ScrDesc.
Ce projet utilise la bibliothèque st_menu - implémentation de la barre de menus CUA et du menu déroulant pour ncurses https://github.com/okbob/ncurses-st-menu
Si vous l'aimez, envoyez une carte postale de votre pays d'origine à mon adresse, veuillez :
Pavel Stehule
Skalice 12
256 01 Benesov u Prahy
Czech Republic
J'invite toutes questions, commentaires, rapports de bugs, correctifs à l'adresse mail [email protected]