Jeder, der psql
nutzt, nutzt auch den less
Pager. Was zwar gut funktioniert, aber keine besondere Unterstützung für Tabellendaten bietet. Ich habe ein paar Projekte gefunden, aber keines war für diesen Zweck gut genug. Deshalb habe ich beschlossen, einen kleinen Spezial-Pager zu schreiben, der als psql
Pager verwendet werden kann.
Dieser Pager kann auch von den folgenden Befehlszeilen-Clients verwendet werden:
mysql
sqlite
pgcli
monetdb
Trino (formerly Presto SQL)
usql
sqlcl
(für Oracle)nushell
mcview
oder FoxPro
– http://okbob.blogspot.com/2019/12/pspg-themes-what-you-use-it.html Das pspg
kann einfach aus Debian-(Ubuntu-)Repositories installiert werden. RedHat (Fedora)-Repositories enthalten auch pspg
:
# Debian (Ubuntu)
sudo apt-get install pspg
# RedHat (Fedora)
sudo dnf install pspg
Die Grundkonfiguration ist sehr einfach – legen Sie einfach die Systemumgebungsvariable PSQL_PAGER
fest:
export PSQL_PAGER='pspg -X -b'
Die native Installation unter MS Windows wird nicht unterstützt, aber pspg
funktioniert gut in wsl2
. In der WSL2-Umgebung ist die Installation dieselbe wie auf einem gebrauchten Linux-System.
Die Installation unter macOS/Homebrew ist einfach mit 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 teilt viele Tastenbefehle mit dem Less-Pager oder dem VI-Editor.
Optionen können auch innerhalb der PSPG
Umgebungsvariablen übergeben werden. Die Konfigurationsdatei wird zuerst verarbeitet. Optionen aus der PSPG
Variable werden nach dem Schritt verarbeitet und Befehlszeilenoptionen werden am Ende verarbeitet. Eine Option kann mehrfach verarbeitet werden, der letzte Wert gewinnt.
Name | Verwendung |
---|---|
PSPG | kann dieselben Optionen wie die Befehlszeile enthalten |
PSPG_CONF | Pfad zur Konfigurationsdatei |
PSPG_HISTORY | Pfad zur Readline-Verlaufsdatei von pspg |
Die Feldnamen können sich von den zugehörigen Befehlszeilenoptionen unterscheiden:
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 | Name |
---|---|
0 | schwarz & weiß |
1 | Midnight Commander wie |
2 | FoxPro wie |
3 | Pdmenu wie |
4 | Weißes Thema |
5 | Mutt wie |
6 | PCFand like |
7 | Grünes Thema |
8 | Blaues Thema |
9 | Word Perfect wie |
10 | Blaues Thema mit geringem Kontrast |
11 | Dunkler Cyan/Schwarz-Modus |
12 | Paradox ähnlich |
13 | dBase IV Retro-Stil |
14 | dBase IV Retro-Stil (Magenta-Etiketten) |
15 | Rot-weißes Thema |
16 | Einfaches Thema |
17 | Solarisiertes dunkles Thema |
18 | Thema solarisiertes Licht |
19 | Gruvbox-Lichtthema |
20 | Tao Light-Thema |
21 | FlatWhite-Thema |
22 | Thema „Relationale Rohre“. |
23 | Thema „Papierfarbe“. |
siehe http://okbob.blogspot.cz/2017/07/i-hope-so-every-who-uses-psql-uses-less.html
Das Thema kann über Basis- und Menüvorlagen angepasst werden, die auf die integrierten Themen verweisen. Die benutzerdefinierte Designdatei sollte im Verzeichnis mit pspg
-Konfiguration gespeichert werden. Der Name dieser Datei sollte .pspg_theme_xxx sein. Das benutzerdefinierte Design kann mit der Befehlszeilenoption --custom-style=name
oder mit dem Befehl ctheme name
ausgewählt werden.
Beispiel einer benutzerdefinierten Designdatei (mit dem Namen .pspg_theme_mc2
(kann mit dem Befehl ctheme mc2
aktiviert werden)):
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
Einige Tasten können mit dem Symbol *
gekennzeichnet sein. Markierte Schlüssel werden für ungerade Datensätze verwendet.
data* = black, lightgray
label* = black, lightgray, italic, bold
border* = #000000, lightgray
template
und template_menu
legen Fallback-Werte für alle Schlüssel fest, die nicht im benutzerdefinierten Design angegeben sind. Insbesondere template_menu
ist derzeit die einzige Möglichkeit, das Erscheinungsbild des F9-Menüs anzupassen.
Schlüssel | passt sich an |
---|---|
background | Hintergrundfarbe |
data | Datentext (keine Kopfzeile oder eingefrorene Spalte). |
border | Randfarbe |
label | Beschriftungstext (Kopfzeile oder eingefrorene Spalte). |
row_number | Zeilennummern |
record_number | |
selected_area | |
footer | Fußzeile der Ergebnisse (nicht tabellarisch, z. B. Zeilenanzahl) |
cursor_data | Hervorgehobener Datentext (keine Kopfzeile oder eingefrorene Spalte). |
cursor_border | Hervorgehobene Randfarbe |
cursor_label | Hervorgehobener Beschriftungstext (Kopfzeile oder eingefrorene Spalte). |
cursor_row_number | Hervorgehobene Zeilennummern |
cursor_record_number | |
cursor_selected_area | |
cursor_footer | Hervorgehobene Fußzeile der Ergebnisse (nicht tabellarisch, z. B. Zeilenanzahl) |
scrollbar_arrows | Aufwärts- und Abwärtspfeile der Bildlaufleiste |
scrollbar_background | Hintergrund der Bildlaufleiste „leer“. |
scrollbar_slider | Schieberegler der Bildlaufleiste über dem Hintergrund |
scrollbar_active_slider | Scrollbar-Schieberegler mit der Maus erfasst |
title | Ergebnisüberschrift (in psql-Beschreibungsbefehlen) |
status_bar | Top-Abfrage- und Cursorpositionsinformationen |
prompt_bar | |
info_bar | Infotext (z. B. „Nicht gefunden“ bei der Suche) |
input_bar | Eingabeaufforderung und Text (z. B. Suche) |
error_bar | |
bookmark | |
bookmark_border | |
cursor_bookmark | |
cross_cursor | Hervorgehobene Zelle am Schnittpunkt von horizontalem und vertikalem Cursor |
cross_cursor_border | Grenzen am Schnittpunkt von horizontalen und vertikalen Cursorn |
matched_pattern | Suchergebnis stimmt mit dem Text überein |
matched_pattern_nohl | |
matched_line | Zeile mit Suchergebnis |
matched_line_border | Ränder in der Suchergebniszeile |
matched_pattern_cursor | Hervorgehobener Suchergebnis-Übereinstimmungstext |
matched_line_vertical_cursor | Vertikal hervorgehobener Suchergebnis-Übereinstimmungstext |
matched_line_vertical_cursor_border | Ränder der vertikal hervorgehobenen Zelle mit Suchergebnisübereinstimmung |
error |
Die ANSI-Farben Black
, Red
, Green
, Brown
, Blue
, Magenta
, Cyan
, LightGray
, Gray
, BrightRed
, BrightGreen
, Yellow
, BrightBlue
, BrightMagenta
, BrightCyan
, White
und Default
werden angezeigt, wenn Ihr Terminalemulator sie konfiguriert. Alternativ können Sie hexadezimale RGB-Werte #FF00FF
angeben.
Stile sind beliebige Kombinationen aus: bold
, italic
, underline
, reverse
, standout
, dim
.
Wenn das Format eines Schlüssels nicht korrekt ist, wird diese Zeile ignoriert. Zum Debuggen eines benutzerdefinierten Themes empfiehlt es sich, pspg
mit der Option --log
zu starten. Informationen zu fehlerhaften Definitionen werden in der Protokolldatei gespeichert.
Schlüssel(s) | Befehl |
---|---|
0 , 1 , 2 , 3 , .., 9 | Die ersten N Spalten einfrieren |
KEY_UP , k | um eine Zeile rückwärts navigieren |
KEY_DOWN , j | um eine Zeile vorwärts navigieren |
KEY_LEFT , h | nach links scrollen |
KEY_RIGHT , l | nach rechts scrollen |
Strg + KEY_LEFT | Scrollen Sie ein Zeichen nach links |
Strg + KEY_RIGHT | Scrollen Sie ein Zeichen nach rechts |
Umschalt + KEY_LEFT | eine Spalte nach links scrollen |
Umschalt + KEY_RIGHT | eine Spalte nach rechts scrollen |
Strg + Home , g | Gehen Sie zum Anfang der Datei |
Strg + Ende , G | Gehen Sie zum Ende der Datei |
Alt + l | Gehe zur Zeilennummer |
H | Gehe zur ersten Zeile des aktuellen Fensters |
M | Gehe zur Hälfte des aktuellen Fensters |
L | Gehe zum Ende des aktuellen Fensters |
PPAGE , Strg + b | ein Fenster zurück |
NPAGE , Strg + f , Leertaste | ein Fenster weiterleiten |
HOME , ^ | Gehe zum Zeilenanfang, erste Spalte |
ENDE , $ | Gehe zum Ende der Zeile, letzte Spalte |
Strg + e | Scrollen Sie ein Fenster nach unten |
Strg + Y | Scrollen Sie ein Fenster nach oben |
Strg + d | ein halbes Fenster nach vorne |
Strg + u | ein halbes Fenster nach hinten |
S | Inhalte in einer Datei speichern |
/ | Suchen Sie nach einem Muster, das Sie zum nächsten Vorkommen führt |
? | Suchen Sie nach einem Muster, das Sie zum vorherigen Vorkommen führt |
N | für das nächste Spiel |
N | für das nächste Spiel in umgekehrter Richtung |
C | Spaltensuche |
Alt + / | Suchen Sie nach einem Muster im ausgewählten Bereich |
Alt + ? | Rückwärtssuche nach einem Muster im ausgewählten Bereich |
Alt + c | Ein-/Ausschalten des Zeichenliniencursors |
Alt + m | Eigenen Maushandler ein-/ausschalten |
Alt + n | Zeichnungszeilennummern ein-/ausschalten |
Alt + v , doppelklicken Sie auf die Spaltenüberschrift | Ein-/Ausschalten des Zeichen-Spaltencursors |
Mausrad | vertikal scrollen |
Alt + Maustaste Rad | horizontal scrollen |
F9 | Menü anzeigen |
q , F10 , Esc 0 | aufhören |
Alt + q | Beenden Sie den Vorgang und drucken Sie Rohinhalte (unformatiert). |
Alt + k , Alt + Doppelklick | Lesezeichen wechseln |
Alt + j | Gehe zum nächsten Lesezeichen |
Alt + i | Gehe zum vorherigen Lesezeichen |
Alt + o | Lesezeichen löschen |
A | aufsteigend sortieren |
D | absteigend sortieren |
u | unsortiert (in Ursprungsreihenfolge sortiert) |
Raum | Stoppen/Fortfahren im Uhrmodus |
R | Bildschirm neu zeichnen und Eingabedatei aktualisieren |
Ins | Exportieren Sie Zeile, Spalte oder Zelle in das Standardziel |
Umschalt + Cursor... | Bereich definieren |
F3 | Beginn/Ende der Auswahlzeilen |
Umschalt + F3 | Beginn/Ende des Auswahlblocks |
Strg + Maus ziehen | Definiert die Zeilenauswahl, die Spaltenüberschrift definiert die Spaltenauswahl |
Strg + o | Um den Hauptbildschirm anzuzeigen, drücken Sie eine beliebige Taste, um wieder zum Pager zurückzukehren |
% , Strg + a | Alles auswählen |
Befehl | Beschreibung |
---|---|
N | Gehe zur Zeilennummer |
+N | gehe zu N Zeilen vorwärts |
-N | gehe zu N Zeilen rückwärts |
N+ | Gehe zur Zeilennummer |
N- | Gehen Sie vom Ende zur Zeilennummer |
theme N | Legen Sie die Themennummer fest |
copy [all|selected] [nullstr "str"] [csv|tsv|insert|text|pipesep|sqlvalues] | Daten in die Zwischenablage kopieren |
save [all|selected] [nullstr "str"] [csv|tsv|insert|text|pipesep|sqlvalues] | Daten in die Zwischenablage kopieren |
order [N|column name] | nach Spalte sortieren |
orderd [N|column name] | desc nach Spalte sortieren |
sort [N|column name] | nach Spalte sortieren |
sortd [N|column name] | desc nach Spalte sortieren |
dsort [N|column name] | desc nach Spalte sortieren (Alias) |
rsort [N|column name] | desc nach Spalte sortieren (Alias) |
asc [N|column name] | Nach Spalte sortieren (Alias) |
desc [N|column name] | desc nach Spalte sortieren (Alias) |
search [back] [selected] [column name] [string|"string"] | Suchzeichenfolge in Daten |
Die Ausgabe kann zu jedem Befehl umgeleitet werden, wenn der Name mit einem Pipe-Symbol beginnt:
copy csv | less
Der Pager kann durch Drücken der Tasten q oder F10 oder Esc 0 beendet werden. Mit der Option --on-sigint-exit
wird der Pager dann durch Drücken der Tasten Strg + c oder Esc Esc geschlossen.
pspg unterstützt die Möglichkeit, eine Tastenfolge Esc , Taste anstelle einer Kombination aus Alt + Taste zu verwenden. Das Intervall zwischen dem Drücken von Esc und der Taste wird durch das Intervall begrenzt, das durch die Option esc-delay
oder durch die Konfigurationsoption esc_delay
angegeben wird. Dies ist die maximale Verzögerungszeit in ms. Nach diesem Intervall wird das einmalige Drücken von Esc als Escape
interpretiert. -1 bedeutet unbegrenzt, 0 deaktiviert diese Funktion.
Bei der Spaltensuche wird die Groß-/Kleinschreibung immer ignoriert. Die durchsuchte Spalte wird durch einen vertikalen Cursor markiert. Das letzte Suchmuster für nicht leere Zeichenfolgen wird verwendet, wenn das aktuelle Suchmuster eine leere Zeichenfolge ist. Die Suche beginnt nach der sichtbaren vertikalen Spalte oder nach den ersten sichtbaren, nicht eingefrorenen Spalten (nach etwas horizontalem Scrollen) oder nach der ersten Spalte. Nach der letzten Spalte beginnt die Suche wieder von vorne.
Zur Unterstützung der Zwischenablage sollte die Zwischenablageanwendung installiert sein: 1. wl-clipboard (Wayland), 2. xclip (xwindows), 3. pbcopy (MacOS) oder 4. clip.exe (WSL2).
pspg
versucht jedes Mal, das Unicode-Symbol „∅“ in NULL zu übersetzen. Wenn Sie keine spezielle Einstellung von pset null ...
verwenden, zeigt psql
eine leere Zeichenfolge anstelle von NULL an. pspg
verfügt für diesen Fall über keine spezielle Erkennung (in Exportroutinen). Sie sollten den Menüpunkt Empty string is NULL
überprüfen und aktivieren oder deaktivieren.
pspg
verfügt über eine automatische Erkennung der Zwischenablageanwendung. Leider sollte diese Erkennung in denselben Fällen nicht funktionieren. Sie können die Anwendung angeben, indem Sie die Nummer (1,2,3,4) für die Option --clipboard-app
angeben.
Formate machen einen Unterschied! pspg kopiert Datensätze standardmäßig im CSV-Format, das Komma-Trennzeichen verwendet und anfängliche und nachfolgende Leerzeichen entfernt . Verwenden Sie „formatierten Text“, um die Abfrageausgabe exakt zu kopieren, oder wählen Sie eine der anderen verfügbaren Optionen.
V: [d/d d..d]
– vertikaler Cursor: (Spaltennummer)/(Spalten) (Zeichenpositionen von) .. (Zeichenpositionen bis)FC: d
– Länge der eingefrorenen Spalten in ZeichenC: d..d/d
– nicht eingefrorene sichtbare Daten in Zeichen (von .. bis)/(gesamt)L:[d + dd/d]
– Zeilen (Anzahl der ersten sichtbaren Zeile) + (Anzahl der Anzeigezeile), (aktuelle Zeile)/(Zeilen)d%
– Prozentsatz der bereits angezeigten Daten Es funktioniert gut mit Miller http://johnkerl.org/miller/doc/index.html
mlr --icsv --opprint --barred put '' obce.csv | pspg --force-uniborder
Neue Version verfügt über integrierte CSV-Unterstützung – verwenden Sie einfach die Option --csv
.
Es kann in mc
integriert werden
/etc/mc/mc.ext
in Ihr ~/.config/mc directory
##csv regex/.csv Ansicht=pspg -f %f --csv
mc
neu starten pspg
unter Cygwin verwenden, wurde ein vorübergehendes Einfrieren des Scrollens gemeldet. In diesem Fall verwenden Sie bitte die Option --no-sleep
. Ich sehe langsames Scrollen (über die Bildlaufleiste) in der Konsole (KDE-Terminal). Auch die Option --no-sleep
hilft. Das Ergebnis der Abfrage kann alle n Sekunden aktualisiert werden. pspg
merkt sich die Cursorzeile, den möglichen vertikalen Cursor und die mögliche Reihenfolge. Die Aktualisierung sollte durch Drücken der Leertaste angehalten werden. Durch wiederholtes Drücken dieser Taste wird eine erneute Aktualisierung ermöglicht.
pspg
verwendet die inotify-API, wenn sie verfügbar ist, und wenn die Eingabedatei geändert wird, liest pspg
die Datei sofort erneut. Dieses Verhalten kann durch die Option --no-watch-file
oder durch Angabe der Wiedergabezeit durch die Option --watch
deaktiviert werden.
pspg
kann einen kontinuierlichen Strom tabellarischer Daten aus einer Pipe, einer benannten Pipe oder aus einer Datei lesen (mit der Option --stream
) oder einen Strom von Abfragen aus der Pipe oder aus der Datei lesen (mit der Option --querystream
). Im Stream-Modus Es können nur Daten im Tabellenformat verarbeitet werden, da pspg
leere Zeilen als Trennzeichen zwischen Tabellen verwendet.
Der Abfrage-Stream-Modus ist eine Folge von SQL-Anweisungen, die durch char GS (Gruppentrennzeichen – 0x1D in einer getrennten Zeile) getrennt sind.
pavel@localhost ~]$ cat < /dev/pts/3 > ~/pipe Wählen Sie 10 ^] Wählen Sie 20 ^] wählen * aus pg_class ^]
Sie sollten Ihrem Profil Folgendes hinzufügen:
#für Postgres 10 und älter export PAGER="pspg" #für Postgres 11 und neuer export PSQL_PAGER="pspg" #oder „setenv PAGER pspg“ nach .psqlrc
und .psqlrc
set RUHIG 1 pset linestyle unicode pset Grenze 2 pset null ∅ unset RUHIG
einige mögliche Konfigurationen:
– Schalten Sie Pager mit den Befehlen :x und :xx um set x '\setenv PAGER weniger' set xx '\setenv PAGER 'pspg -bX --no-mouse'' :xx
LC_CTYPE
sollte korrekt sein. Hauptsächlich, wenn Sie Unicode-Rahmen verwenden. ncurses zeigt keine Unicode-Rahmen (erzeugt von psql
) an, ohne dass diese Variable korrekt eingestellt ist. Es ist möglich, einen Wert „C.UTF8“ zu überprüfen.
Wenn Sie eine Option verwenden --only-for-tables
, dann
PAGER
auf pspg
und PSQL_PAGER
auf less
oderPAGER
auf less
und PSQL_PAGER
auf pspg
MariaDB [sakila]> pager pspg -s 14 -X --force-uniborder --quit-if-one-screen PAGER auf „pspg -s 14 -X --force-uniborder --quit-if-one-screen“ gesetzt MariaDB [sakila]> select now(); MariaDB [sakila]> select * from nicer_but_slower_film_list limit 100;
Der native SQLite-Client erzeugt keine gut formatierte Ausgabe, kann aber gezwungen werden, ein CSV-Format zu generieren – und dieses Format ist für pspg
gut lesbar
sqlite3 -csv -header testdb.db 'select * from foo2' | pspg --csv --csv-header=on --double-header
pgcli benötigt die folgenden Konfigurationsoptionen ( ~/.config/pgcli/config
):
pager = /usr/bin/pspg --csv --rr=2 --quit-if-one-screen --ignore-case --csv-header on --pgcli-fix
table_format = csv
Ältere Versionen von pgcli hatten eine sehr langsame Ausgabe im Tabellenformat. Eine Problemumgehung war die Verwendung des CSV-Formats. Dies sollte in aktuellen Versionen nicht erforderlich sein, wenn das Leistungsproblem behoben wurde. Eine Option --pgcli-fix
korrigierte den Import eines teilweise fehlerhaften CSV-Formats, das von pgcli
generiert wurde. Die moderne Version von pgcli
benötigt kein CSV-Format und keine Option --pgcli-fix
.
pager = /usr/bin/pspg --rr=2 --quit-if-one-screen --ignore-case
Da sqlcl
derzeit keine Pager-Option direkt unterstützt, können Sie entweder ein Tool wie qsh verwenden, um dieses Problem zu umgehen, oder das pspg.sql-Skript aus diesem Repo verwenden.
Um das Skript zu verwenden, starten Sie sqlcl
wie unten gezeigt (es ist wichtig, die Details Ihres aktuellen TTY einzugeben):
$ TTY=$(tty) sqlcl system/system @/path/to/pspg.sql
Sie können nun die Ergebnisse einer Abfrage wie folgt an pspg
senden lassen:
SQL> pspg select * from user_tables;
Das pspg
unterstützt die Standardeinstellungen table_mode
: rounded
und table_mode
: heavy
.
Die Konvertierung in CSV kann ebenfalls verwendet werden.
sys | get cpu | to csv | pspg --csv
Hinweis: footer_mode
sollte deaktiviert sein
Nushell-Konfiguration:
$env.config.footer_mode = never
$env.config.table.header_on_separator = false
$env.config.ls.clickable_links = false
$env.config.table.mode = rounded
pspg versucht, den xterm-Mausmodus 1002 zu verwenden, wenn Terminal und Ncurses nicht zu alt sind. Wenn es Probleme mit der Nutzung gibt – unerwünschte visuelle Artefakte, wenn Sie sich mit der Maus bewegen, während eine Maustaste gedrückt wird, dann 1. melden Sie bitte das Problem (bitte fügen Sie eine Protokolldatei bei), 2. verwenden Sie eine Option --no-xterm-mouse-mode
und pspg
wird nicht versuchen, diesen Modus zu aktivieren.
Auf meinem Fedora zeigt dieses Terminal echte Farbthemen nicht korrekt an. Das Grundproblem liegt in der Standardeinstellung TERM
, also xterm-256color
. Leider ist das konsole
nicht vollständig mit xterm
kompatibel und ermöglicht keine Farbänderung. Sie können direkte Farben erzwingen, indem Sie die Option --direct-color
verwenden oder TERM=xterm-direct
festlegen. Die zweite Option ist die korrektere Einstellung der TERM
Variablen auf konsole-256color
. In diesem Fall ordnet das pspg
die echten RGB-Farben den unterstützten 256 Farben zu.
Einige Linker-Probleme können behoben werden durch:
Ich habe mich verändert gcc -lncursesw pager.c -o pspg -ggdb Zu gcc pager.c -o pspg -ggdb -lncursesw
Wenn Sie pspg
als Postgres-Client verwenden möchten, müssen Sie configure --with-postgresql=yes
ausführen. Auf Fedora mit eigenem Postgres-Build musste ich das Paket openssl-devel
installieren und export PKG_CONFIG_PATH="/usr/local/pgsql/master/lib/pkgconfig/"
festlegen.
Unter FreeBsd sollten Sie stattdessen gmake
verwenden make
.
Wenn Sie Code aus dem Quellcode kompilieren, führen Sie zuerst ./configure aus. Manchmal zuerst ./autogen.sh
Wenn Sie UTF-8-Zeichen anzeigen möchten, sollte pspg
mit der Bibliothek ncursesw
verknüpft sein. UTF-8-Zeichen werden schlecht angezeigt, wenn die Bibliothek ncursesw
verwendet wird. Sie können auch fehlerhafte Zeichen mit falscher Ländereinstellung sehen.
Sie können die Unterstützung für breite Zeichen mithilfe von pspg --version
überprüfen. Zeilen- ncurses with wide char support
werden erwartet. Führen Sie configure
mit der Option --with-ncursesw
erneut aus. Wenn dieser Befehl fehlschlägt, prüfen Sie, ob das Entwicklungspaket für die Ncursesw-Bibliothek installiert ist.
# brew install pspg
Sie können pspg
problemlos ohne brew
kompilieren, benötigen jedoch gnu readline
-Bibliothek. MacOS verwendet standardmäßig die über libedit emulierte Readline, pspg
erfordert jedoch die vollständige GNU-Readline-Bibliothek.
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
Das PSPG ist im Community-Repository https://yum.postgresql.org/packages.php verfügbar
# apk add pspg
# emerge -av dev-db/pspg
Das Arch User Repository enthält zwei Versionen:
master
. Verwenden Sie den AUR-Helfer Ihrer Wahl oder git und makepkg
um pspg zu installieren.
# pkg install pspg
# pkg_add pspg
Mehr dazu
# port install pspg
pspg
kann einfach unter MS Windows verwendet werden, indem wsl2 verwendet wird. Ich habe es getestet und es funktioniert ohne Probleme.
Führen Sie im Terminal wsl --install -d Ubuntu-22.04
aus
Öffnen Sie im Terminal die Ubuntu-Sitzung
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
es gibt keinen Unterschied zur Installation und Arbeit unter Ubuntu (Debian)
pspg
ist noch nicht auf MS Windows portiert. Es besteht die Abhängigkeit von ncurses und der korrekt (vollständig) implementierten Funktion newterm
( pdcurses
macht dies nur auf Unix-Plattformen). Es kann vielleicht mit WSL2 funktionieren (ich habe es nicht getestet). Eine Alternative kann die Verwendung less
Pager sein, der auf einige MS Win-Umgebungen portiert wird. less
hängt von termcap
ab und ist etwas portabler als pspg
( termcal
ist eine niedrige Ebene von Ncurses). less
unterstützt feste Zeilen und kann mit der Option --chop-long-lines
oder einfach -S
als Pager für pspg
verwendet werden.
export PSQL_PAGER="less --chop-long-lines --header 1"
Es gibt nur wenige Probleme, die für eine erfolgreiche Kompilierung manuelle Codeänderungen erfordern – wir haben pspg
erfolgreich getestet, aber obwohl pspg
mit ncursesw-Bibliotheken verknüpft war, funktionierte die Unterstützung der UTF8-Codierung nicht vollständig korrekt – wahrscheinlich aufgrund einiger Probleme in libc
-Bibliothek. Es gibt Probleme mit Zeichen, die auf 3 Bytes codiert sind – Unicode-Ränder usw. Zwei-Byte-Unicode-Zeichen sollten gut angezeigt werden.
Sie können pspg
mit üblichen Akzentzeichen verwenden, Unicode-Ränder sollten jedoch nicht verwendet werden. Das Ersetzen von ASCII-Rändern durch spezielle Rahmenzeichen (durch Ncurses-Technologie) funktioniert gut – siehe Option Options|Force unicode borders
.
Solaris make
unterstützt keine bedingten Anweisungen – sollte entfernt werden. Entfernen Sie daher nicht unterstützte Funktionen aus Makefile
( ifdef
, endif
) und ersetzen Sie zuerst -include
durch include
.
Entfernen Sie nach dem Ausführen configure
den Link zur termcap
-Bibliothek aus config.make
. Es handelt sich um Müll, der vom readline
Automake-Skript erzeugt wird. Die Kombination mit ncurses
-Bibliotheken führt zu einigen Verknüpfungsproblemen.
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
Speichern Sie Daten in einem Spaltenformat (jetzt werden Daten wie ein Array von Zeilen gespeichert). Mit dieser Änderung ist es möglich, über Spalten zu arbeiten – Spalten ausblenden, Breite ändern, zyklische Iteration über Spalten, Reihenfolge von Spalten ändern, Spalten markieren und nur ausgewählte Spalten (ausgewählte Zeilen) exportieren.
Ersetzen Sie das Drucken des Dokuments direkt im Ncurses-Fenster durch eine intelligentere Struktur. Intern gibt es zahlreiche Prüfungen und Korrekturen zur Unterstützung komplexer dynamischer Layouts. Die möglichen Ansichten sollten sich an die erste Zeile, die letzte Zeile und die aktuelle Zeile erinnern. Diese Daten befinden sich nun in globalen Variablen oder in DataDesc- und ScrDesc-Strukturen.
Dieses Projekt verwendet die st_menu-Bibliothek – Implementierung der CUA-Menüleiste und des Pulldown-Menüs für ncurses https://github.com/okbob/ncurses-st-menu
Wenn es Ihnen gefällt, senden Sie bitte eine Postkarte aus Ihrem Heimatland an meine Adresse:
Pavel Stehule
Skalice 12
256 01 Benesov u Prahy
Czech Republic
Ich lade alle Fragen, Kommentare, Fehlerberichte und Patches an die E-Mail-Adresse [email protected] ein