Все, кто использует psql
также используют пейджер less
. Который, хотя и работает хорошо, не имеет специальной поддержки табличных данных. Я нашел несколько проектов, но ни один из них не подходил для этой цели. Поэтому я решил написать небольшой специализированный пейджер, который можно было бы использовать в качестве пейджера psql
.
Этот пейджер также можно использовать из следующих клиентов командной строки:
mysql
sqlite
pgcli
monetdb
Trino (formerly Presto SQL)
usql
sqlcl
(для оракула)nushell
mcview
или FoxPro
— http://okbob.blogspot.com/2019/12/pspg-themes-what-you-use-it.html pspg
можно просто установить из репозиториев Debian (Ubuntu). Репозитории RedHat (Fedora) также содержат pspg
:
# Debian (Ubuntu)
sudo apt-get install pspg
# RedHat (Fedora)
sudo dnf install pspg
Базовая конфигурация очень проста — просто установите переменную системной среды PSQL_PAGER
:
export PSQL_PAGER='pspg -X -b'
Собственная установка в MS Windows не поддерживается, но pspg
хорошо работает внутри wsl2
. В среде wsl2 установка такая же, как и в используемой системе Linux.
Установка на macOS/homebrew проста: 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 имеет много общих команд с пейджером less или редактором vi.
Параметры также можно передавать в переменной среды PSPG
. Файл конфигурации обрабатывается первым. Параметры переменной PSPG
обрабатываются после этого шага, а параметры командной строки обрабатываются в конце. Один вариант может обрабатываться несколько раз, побеждает последнее значение.
Имя | Использование |
---|---|
PSPG | может содержать те же параметры, что и командная строка |
PSPG_CONF | путь к файлу конфигурации |
PSPG_HISTORY | путь к файлу файла истории чтения pspg |
Имена полей могут отличаться от соответствующих параметров командной строки:
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
Код | Имя |
---|---|
0 | черно-белый |
1 | Полуночный командир вроде |
2 | FoxPro нравится |
3 | Pdменю нравится |
4 | Белая тема |
5 | мутный типа |
6 | PCFи нравится |
7 | Зеленая тема |
8 | Синяя тема |
9 | Слово Perfect нравится |
10 | Низкоконтрастная синяя тема |
11 | Темно-голубой/черный режим |
12 | Парадокс как |
13 | dBase IV в стиле ретро |
14 | Ретро-стиль dBase IV (бирки пурпурного цвета) |
15 | Красно-белая тема |
16 | Простая тема |
17 | Соляризованная темная тема |
18 | Солнечная светлая тема |
19 | Светлая тема Gruvbox |
20 | Тема Дао Свет |
21 | КвартираБелая тема |
22 | Тема реляционных каналов |
23 | Тема «Цвет бумаги» |
см. http://okbob.blogspot.cz/2017/07/i-hope-so-every-who-uses-psql-uses-less.html.
Тему можно настроить поверх базовых шаблонов и шаблонов меню, ссылаясь на встроенные темы. Файл пользовательской темы следует сохранить в каталоге с конфигурацией pspg
. Имя этого файла должно быть .pspg_theme_xxx. Пользовательскую тему можно выбрать с помощью параметра командной строки --custom-style=name
или команды ctheme name
.
Пример файла пользовательской темы (с именем .pspg_theme_mc2
(его можно активировать командой 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
Некоторые клавиши могут быть отмечены символом *
. Отмеченные ключи используются для нечетных записей.
data* = black, lightgray
label* = black, lightgray, italic, bold
border* = #000000, lightgray
template
и template_menu
устанавливают резервные значения для любых ключей, не указанных в пользовательской теме. В частности, template_menu
в настоящее время является единственным способом настройки внешнего вида меню F9.
ключ | настраивает |
---|---|
background | Цвет фона |
data | Текст данных (без заголовка или закрепленного столбца) |
border | Цвет границы |
label | Текст метки (заголовок или закрепленный столбец) |
row_number | Номера строк |
record_number | |
selected_area | |
footer | Нижний колонтитул результатов (нетабличный, например количество строк) |
cursor_data | Выделенный текст данных (без заголовка или закрепленного столбца) |
cursor_border | Выделенный цвет границы |
cursor_label | Выделенный текст метки (заголовок или закрепленный столбец) |
cursor_row_number | Выделенные номера строк |
cursor_record_number | |
cursor_selected_area | |
cursor_footer | Нижний колонтитул с выделенными результатами (нетабличный, например количество строк) |
scrollbar_arrows | Полоса прокрутки со стрелками вверх и вниз |
scrollbar_background | Полоса прокрутки «пустой» фон |
scrollbar_slider | Ползунок полосы прокрутки на заднем плане |
scrollbar_active_slider | Ползунок полосы прокрутки, захватываемый мышью |
title | Заголовок результатов (в командах описания psql) |
status_bar | Информация о главном запросе и местоположении курсора |
prompt_bar | |
info_bar | Информационный текст (например, «Не найдено» при поиске) |
input_bar | Введите подсказку и текст (например, поиск) |
error_bar | |
bookmark | |
bookmark_border | |
cursor_bookmark | |
cross_cursor | Выделенная ячейка на пересечении горизонтального и вертикального курсоров |
cross_cursor_border | Границы на пересечении горизонтального и вертикального курсоров |
matched_pattern | Текст соответствия результатов поиска |
matched_pattern_nohl | |
matched_line | Строка, содержащая результат поиска |
matched_line_border | Границы в строке результатов поиска |
matched_pattern_cursor | Выделенный текст соответствия результатов поиска |
matched_line_vertical_cursor | Вертикально выделенный текст соответствия результатов поиска |
matched_line_vertical_cursor_border | Границы вертикально выделенной ячейки совпадают с результатами поиска |
error |
Цвета ANSI Black
, Red
, Green
, Brown
, Blue
, Magenta
, Cyan
, LightGray
, Gray
, BrightRed
, BrightGreen
, Yellow
, BrightBlue
, BrightMagenta
, BrightCyan
, White
и Default
будут отображаться так, как их настраивает эмулятор терминала. Альтернативно вы можете указать шестнадцатеричные значения RGB #FF00FF
.
Стили — это любая комбинация: bold
, italic
, underline
, reverse
, standout
, dim
.
Если формат какого-либо ключа неверен, то эта строка игнорируется. Для отладки пользовательской темы полезно запустить pspg
с опцией --log
. Информация о нарушенных определениях сохраняется в файле журнала.
Ключ(и) | Команда |
---|---|
0 , 1 , 2 , 3 , .., 9 | заморозить первые N столбцов |
KEY_UP , к | перейти назад на одну строку |
KEY_DOWN , j | перейти вперед на одну строку |
KEY_LEFT , ч | прокрутите влево |
KEY_RIGHT , л | прокрутите вправо |
Ctrl + KEY_LEFT | прокрутить один символ влево |
Ctrl + KEY_RIGHT | прокрутить один символ вправо |
Шифт + KEY_LEFT | прокрутить один столбец влево |
Шифт + KEY_RIGHT | прокрутить один столбец вправо |
Ctrl + Домой , г | перейти в начало файла |
Ctrl + Конец , G | перейти в конец файла |
Альт + л | перейти на номер строки |
ЧАС | перейти на первую строку текущего окна |
М | перейти к половине текущего окна |
л | перейти в конец текущего окна |
СТРАНИЦА , Ctrl + b | назад на одно окно |
NPAGE , Ctrl + f , пробел | вперед на одно окно |
ДОМ , ^ | перейти в начало строки, первый столбец |
КОНЕЦ , $ | перейти к концу строки, последнему столбцу |
Ctrl + е | прокрутить окно вниз |
Ctrl + y | прокрутить окно вверх |
Ctrl + д | вперед на половину окна |
Ctrl + ты | назад на половину окна |
с | сохранить содержимое в файл |
/ | найдите закономерность, которая приведет вас к следующему происшествию |
? | найдите шаблон, который приведет вас к предыдущему случаю |
н | на следующий матч |
Н | для следующего матча в обратном направлении |
с | поиск по столбцу |
Альт + / | поиск узора внутри выбранной области |
Альт + ? | обратный поиск шаблона внутри выбранной области |
Альт + С | включение (включение, выключение) рисования курсора линии |
Альт + м | включить (включить, выключить) собственный обработчик мыши |
Альт + н | включить (включить, выключить) рисование номеров строк |
Alt + v , двойной щелчок по заголовку столбца | переключить (включить, выключить) рисование курсора столбца |
Колесо с кнопками мыши | прокрутка по вертикали |
Alt + колесо мыши | прокрутка по горизонтали |
F9 | показать меню |
q , F10 , Esc 0 | покидать |
Альт + д | выйти и распечатать необработанный (неформатированный) контент |
Alt + k , Alt + двойной щелчок | переключить закладку |
Альт + Дж | перейти к следующей закладке |
Альт + я | перейти к предыдущей закладке |
Альт + о | сбросить закладки |
а | сортировать по возрастанию |
д | сортировать потомка |
ты | несортированный (отсортированный в порядке происхождения) |
Космос | остановиться/продолжить в режиме просмотра |
Р | Перерисовать экран и обновить входной файл |
Инс | экспортировать строку, столбец или ячейку в цель по умолчанию |
шифт + курсор... | определить диапазон |
Ф3 | начало/конец строк выбора |
Шифт + Ф3 | начало/конец блока выбора |
Ctrl + перетаскивание мыши | определяет выбор строк, в заголовке столбца определяет выбор столбца |
Ctrl + о | показать основной экран, нажмите любую клавишу, чтобы снова вернуться на пейджер |
% , Ctrl + а | выбрать все |
Команда | Описание |
---|---|
N | перейти на номер строки |
+N | перейти на N строк вперед |
-N | перейти на N строк назад |
N+ | перейти на номер строки |
N- | перейти к номеру строки с конца |
theme N | установить номер темы |
copy [all|selected] [nullstr "str"] [csv|tsv|insert|text|pipesep|sqlvalues] | скопировать данные в буфер обмена |
save [all|selected] [nullstr "str"] [csv|tsv|insert|text|pipesep|sqlvalues] | скопировать данные в буфер обмена |
order [N|column name] | сортировать по столбцу |
orderd [N|column name] | сортировка по убыванию по столбцу |
sort [N|column name] | сортировать по столбцу |
sortd [N|column name] | сортировка по убыванию по столбцу |
dsort [N|column name] | сортировка по убыванию по столбцу (псевдоним) |
rsort [N|column name] | сортировка по убыванию по столбцу (псевдоним) |
asc [N|column name] | сортировать по столбцу (псевдоним) |
desc [N|column name] | сортировка по убыванию по столбцу (псевдоним) |
search [back] [selected] [column name] [string|"string"] | строка поиска в данных |
Вывод может быть перенаправлен на любую команду, если имя начинается с символа вертикальной черты:
copy csv | less
Пейджер можно завершить, нажав клавиши q , F10 или Esc 0 . При использовании опции --on-sigint-exit
пейджер закрывается нажатием клавиш Ctrl + c или Esc Esc .
pspg поддерживает возможность использовать последовательность клавиш Esc , вместо клавиши сочетание клавиш Alt +. Интервал между нажатием Esc и клавиши ограничен интервалом, указанным опцией esc-delay
или опцией конфигурации esc_delay
. Это максимальное время задержки в мс. По истечении этого интервала однократное нажатие Esc интерпретируется как Escape
. -1 означает неограниченность, 0 отключает эту функцию.
Поиск по столбцу каждый раз нечувствителен к регистру. Искомый столбец отмечен вертикальным курсором. Шаблон поиска последней непустой строки используется, когда текущий шаблон поиска представляет собой пустую строку. Поиск начинается после видимого вертикального столбца, или по первым видимым незакрепленным столбцам (после некоторой горизонтальной прокрутки), или по первому столбцу. После последнего столбца поиск снова начинается с первого.
Для поддержки буфера обмена необходимо установить приложение буфера обмена: 1. wl-clipboard (Wayland), 2. xclip (xwindows), 3. pbcopy (MacOS) или 4. clip.exe (WSL2).
pspg
каждый раз пытается перевести символ Юникода «∅» в NULL. Если вы не используете специальную настройку pset null ...
, psql
вместо NULL отображает пустую строку. pspg
не имеет специального обнаружения (в процедурах экспорта) для этого случая. Вам следует проверить и включить или отключить пункт меню. Empty string is NULL
.
pspg
имеет автоматическое определение приложения буфера обмена. К сожалению, это обнаружение не должно работать в одних и тех же случаях. Вы можете указать приложение, указав номер (1,2,3,4) для параметра --clipboard-app
.
Форматы имеют значение! pspg по умолчанию копирует записи в формате CSV, в котором используются разделители-запятые и обрезаются начальные и конечные пробелы . Используйте «форматированный текст», чтобы точно скопировать выходные данные запроса, или выберите один из других доступных вариантов.
V: [d/d d..d]
- вертикальный курсор: (номер столбца)/(столбцы) (позиция символов от) .. (позиция символов до)FC: d
- длина фиксированных столбцов в символахC: d..d/d
— незамороженные видимые данные в символах (от .. до)/(всего)L:[d + dd/d]
- строки (номер первой видимой строки) + (номер строки отображения), (текущая строка)/(строки)d%
- процент уже отображаемых данных Он хорошо работает с Миллером http://johnkerl.org/miller/doc/index.html.
mlr --icsv --opprint --barred put '' obce.csv | pspg --force-uniborder
В новой версии интегрирована поддержка csv — просто используйте опцию --csv
.
Его можно интегрировать в mc
/etc/mc/mc.ext
в ~/.config/mc directory
##csv регулярное выражение/.csv Просмотр=pspg -f %f --csv
mc
pspg
в Cygwin, сообщалось о временном зависании прокрутки. В этом случае используйте опцию --no-sleep
. Я вижу медленную прокрутку (через полосу прокрутки) внутри консоли (терминал KDE). Опция --no-sleep
тоже помогает. Результат запроса может обновляться каждые n секунд. pspg
запоминает строку курсора, возможный вертикальный курсор, возможный порядок. Обновление следует приостановить, нажав клавишу пробела . Повторное нажатие этой клавиши позволяет выполнить обновление снова.
pspg
использует API-интерфейс inotify, когда он доступен, и при изменении входного файла pspg
немедленно перечитывает файл. Это поведение можно отключить опцией --no-watch-file
или временем просмотра спецификации с помощью опции --watch
.
pspg
может читать непрерывный поток табличных данных из канала, именованного канала или из файла (с опцией --stream
) или может читать поток запросов из канала или из файла (с опцией --querystream
). В потоковом режиме обрабатываться могут только данные в формате таблицы, поскольку pspg
использует пустую строку в качестве разделителя между таблицами.
Режим потока запросов представляет собой последовательность операторов SQL, разделенных символом GS (разделитель групп — 0x1D в отдельной строке).
pavel@localhost ~]$ cat ~/pipe выберите 10 ^] выберите 20 ^] выбирать * от pg_class ^]
Вам необходимо добавить в свой профиль:
#для Postgres 10 и старше экспорт ПЕЙДЖЕР="pspg" #для postgres 11 и новее экспортировать PSQL_PAGER="pspg" #или "setenv PAGER pspg" в .psqlrc
и .psqlrc
set ТИХИЙ 1 pset стиль линии в юникоде pset граница 2 pset ноль ∅ unset ТИХО
некоторая возможная конфигурация:
-- Переключение пейджеров с помощью команд :x и :xx set x '\setenv ПЕЙДЖЕР меньше' set xx '\setenv PAGER 'pspg -bX --no-mouse'' :хх
LC_CTYPE
должен быть правильным. В основном, когда вы используете границы Юникода. ncurses не отображает границы Юникода (созданные psql
) без правильной настройки этой переменной. Можно проверить значение «C.UTF8».
Когда вы используете опцию --only-for-tables
, тогда
PAGER
на pspg
и PSQL_PAGER
на less
илиPAGER
на less
и PSQL_PAGER
на pspg
MariaDB [sakila]> пейджер pspg -s 14 -X --force-uniborder --quit-if-one-screen ПЕЙДЖЕР установлен на «pspg -s 14 -X --force-uniborder --quit-if-one-screen» MariaDB [sakila]> выбрать сейчас(); MariaDB [sakila]> выберите * из ограничения nicer_but_slower_film_list 100;
Собственный клиент SQLite не выдает правильно отформатированный вывод, но его можно заставить генерировать формат CSV, и этот формат хорошо читается для pspg
sqlite3 -csv -header testdb.db 'select * from foo2' | pspg --csv --csv-header=on --double-header
pgcli необходимы следующие параметры конфигурации ( ~/.config/pgcli/config
):
pager = /usr/bin/pspg --csv --rr=2 --quit-if-one-screen --ignore-case --csv-header on --pgcli-fix
table_format = csv
Старая версия pgcli очень медленно выводила данные в табличном формате. Обходным решением было использование формата csv. Это не обязательно в текущих версиях, когда проблема с производительностью устранена. Опция --pgcli-fix
исправила импорт частично поврежденного формата csv, сгенерированного pgcli
. Современной версии pgcli
не нужен формат csv и не нужна опция --pgcli-fix
.
pager = /usr/bin/pspg --rr=2 --quit-if-one-screen --ignore-case
Поскольку sqlcl
в настоящее время не поддерживает опцию пейджера напрямую, вы можете либо использовать такой инструмент, как qsh, чтобы обойти эту проблему, либо использовать сценарий pspg.sql из этого репозитория.
Чтобы использовать сценарий, запустите sqlcl
как показано ниже (важно передать данные вашего текущего терминала):
$ TTY=$(tty) sqlcl system/system @/path/to/pspg.sql
Теперь вы можете получить результаты запроса, отправленного в pspg
следующим образом:
SQL> pspg select * from user_tables;
pspg
поддерживает table_mode
по умолчанию: rounded
и table_mode
: heavy
.
Также можно использовать преобразование в CSV.
sys | get cpu | to csv | pspg --csv
Примечание: footer_mode
должен быть отключен.
конфигурация нушелла:
$env.config.footer_mode = never
$env.config.table.header_on_separator = false
$env.config.ls.clickable_links = false
$env.config.table.mode = rounded
pspg попробуйте использовать режим мыши xterm 1002, когда терминал и ncurses не слишком устарели. Если есть проблемы с использованием - нежелательные визуальные артефакты при перемещении мыши при нажатии какой-либо кнопки мыши, то 1. сообщите о проблеме (пожалуйста, прикрепите файл журнала), 2. используйте опцию --no-xterm-mouse-mode
и pspg
не будет пытаться активировать этот режим.
В моей Fedora этот терминал неправильно отображает темы истинного цвета. Основная проблема заключается в настройке TERM
по умолчанию, то есть xterm-256color
. К сожалению, konsole
терминал не полностью совместим с xterm
и не позволяет менять цвет. Вы можете принудительно использовать прямые цвета, используя опцию --direct-color
или установив TERM=xterm-direct
. Второй вариант — более правильная установка переменной TERM
на konsole-256color
. В этом случае pspg
сопоставит настоящие цвета RGB с поддерживаемыми 256 цветами.
Некоторые проблемы с компоновщиком можно устранить следующим образом:
я изменил gcc -lncursesw pager.c -o pspg -ggdb к gcc pager.c -o pspg -ggdb -lncursesw
Если вы хотите использовать pspg
в качестве клиента Postgres, вам нужно запустить configure --with-postgresql=yes
. В Fedora с собственной сборкой Postgres мне пришлось установить пакет openssl-devel
и установить export PKG_CONFIG_PATH="/usr/local/pgsql/master/lib/pkgconfig/"
.
Во FreeBsd вам следует использовать gmake
вместо make
.
Когда вы компилируете код из исходного кода, сначала запустите ./configure. Иногда сначала ./autogen.sh
Если вы хотите отображать символы UTF-8, pspg
должен быть связан с библиотекой ncursesw
. Символы UTF-8 отображаются плохо при использовании библиотеки ncursesw
. Вы также можете увидеть неработающие символы при неправильной настройке локали.
Вы можете проверить поддержку широких символов с помощью pspg --version
. Ожидается строка ncurses with wide char support
. Повторно запустите configure
с опцией --with-ncursesw
. Если эта команда не удалась, проверьте, установлен ли пакет разработки для библиотеки ncursesw.
# brew install pspg
Вы можете легко скомпилировать pspg
без brew
, но вам понадобится библиотека gnu readline
. MacOS по умолчанию использует линию чтения, эмулированную поверх libedit, но для pspg
требуется полная библиотека строк чтения GNU.
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
PSPG доступен в репозитории сообщества https://yum.postgresql.org/packages.php.
# apk add pspg
# emerge -av dev-db/pspg
Репозиторий пользователей Arch содержит две версии:
master
ветку. Используйте помощник AUR по вашему выбору или git и makepkg
для установки pspg.
# pkg install pspg
# pkg_add pspg
Подробнее об этом
# port install pspg
pspg
можно просто использовать в MS Windows с помощью wsl2. Я протестировал его, и он работает без проблем.
В терминале выполните wsl --install -d Ubuntu-22.04
В терминале откройте сеанс 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
никакой разницы с установкой и работой на Ubuntu (Debian) нет.
pspg
еще не портирован на MS Windows. Существует зависимость от ncurses и правильно (полностью) реализованная функция newterm
( pdcurses
делает это только на платформах Unix). Возможно, он может работать с WSL2 (я не проверял). Альтернативой может быть использование less
пейджера, портированного на некоторые среды MS Win. less
зависит от termcap
и он немного более портативен, чем pspg
( termcal
— это нижний уровень ncurses). less
поддерживает фиксированные строки, и с опцией --chop-long-lines
или просто -S
можно использовать в качестве пейджера для pspg
.
export PSQL_PAGER="less --chop-long-lines --header 1"
Есть несколько проблем, требующих ручного изменения кода для успешной компиляции — мы успешно протестировали pspg
, но хотя pspg
был связан с библиотеками ncursesw, поддержка кодировки utf8 работала не полностью корректно — возможно, из-за некоторых проблем в библиотеке libc
. Есть проблемы с символами, закодированными в 3 байта - границы Юникода.. Двухбайтовые символы Юникода должны отображаться хорошо.
Вы можете использовать pspg
с обычными символами с диакритическими знаками, но границы Юникода использовать не следует. Замена границ ascii специальными символами границ (по технологии ncurses) работает хорошо - выглядит как опция Options|Force unicode borders
.
Solaris make
не поддерживает условные операторы - их следует удалить. Итак, удалите неподдерживаемые функции из Makefile
( ifdef
, endif
), сначала замените -include
на include
.
После запуска configure
удалите ссылку на библиотеку termcap
из config.make
. Это мусор, создаваемый скриптом readline
automake. Комбинация с библиотеками ncurses
создает некоторые проблемы с компоновкой.
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
Сохраняйте данные в каком-либо формате столбца (теперь данные хранятся как массив строк). Благодаря этому изменению можно будет работать со столбцами - скрывать столбцы, изменять ширину, циклически перебирать столбцы, изменять порядок столбцов, отмечать столбцы и экспортировать только выбранные столбцы (выбранные строки).
Замените печатаемый документ непосредственно в окне ncurses какой-нибудь более разумной структурой. Внутри реализовано множество проверок и исправлений для поддержки сложной динамической компоновки. Возможные представления должны запоминать первую строку, последнюю строку, текущую строку. Теперь эти данные находятся в глобальных переменных или в структурах DataDesc и ScrDesc.
В этом проекте используется библиотека st_menu — реализация строки меню CUA и раскрывающегося меню для ncurses https://github.com/okbob/ncurses-st-menu.
Если вам это нравится, отправьте открытку из вашей страны на мой адрес, пожалуйста:
Pavel Stehule
Skalice 12
256 01 Benesov u Prahy
Czech Republic
Приглашаю любые вопросы, комментарии, сообщения об ошибках, исправления на адрес почты [email protected]