Альтернативный формат вывода для psql


Я использую PostgreSQL 8.4 на Ubuntu. У меня есть таблица со столбцами c1 через cN. Столбцы достаточно широки, чтобы выбор всех столбцов приводил к многократному переносу строки результатов запроса. Следовательно, вывод трудно читать.

когда результаты запроса составляют всего несколько строк, было бы удобно, если бы я мог просматривать результаты запроса таким образом, что каждый столбец каждой строки находится в отдельной строке, например

 c1: <value of row 1's c1>
 c2: <value of row 1's c1>
 ...
 cN: <value of row 1's cN>
 ---- some kind of delimiter ----
 c1: <value of row 2's c1>
 etc.

я запускаю эти запросы сервер, где я бы предпочел не устанавливать никакого дополнительного программного обеспечения. Есть настройка, используя psql, которая позволит мне сделать что-то подобное?

7 222

7 ответов:

мне просто нужно было больше времени смотреть на документацию. Эта команда:

\x on

будет делать именно то, что я хотел. Вот некоторые примеры вывода:

select * from dda where u_id=24 and dda_is_deleted='f';
-[ RECORD 1 ]------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
dda_id             | 1121
u_id               | 24
ab_id              | 10304
dda_type           | CHECKING
dda_status         | PENDING_VERIFICATION
dda_is_deleted     | f
dda_verify_op_id   | 44938
version            | 2
created            | 2012-03-06 21:37:50.585845
modified           | 2012-03-06 21:37:50.593425
c_id               | 
dda_nickname       | 
dda_account_name   | 
cu_id              | 1
abd_id             | 

(новый) расширенный автоматический режим: \X auto

New для Postgresql 9.2; PSQL автоматически приспосабливает записи к ширине экрана. раньше у вас был только расширенный режим включения или выключения, и вам приходилось переключаться между режимами по мере необходимости.

  • если запись может поместиться в ширину экрана; psql использует обычное форматирование.
  • если запись может не вписывается в ширину экрана; psql использует расширенный режим.

To получить это использование: \x auto

документация Postgresql 9.5 по команде PSQL.


широкий экран, нормальное форматирование:

 id | time  |       humanize_time             | value 
----+-------+---------------------------------+-------
  1 | 09:30 |  Early Morning - (9.30 am)      |   570
  2 | 11:30 |  Late Morning - (11.30 am)      |   690
  3 | 13:30 |  Early Afternoon - (1.30pm)     |   810
  4 | 15:30 |  Late Afternoon - (3.30 pm)     |   930
(4 rows)

узкий экран, расширенное форматирование:

-[ RECORD 1 ]-+---------------------------
id            | 1
time          | 09:30
humanize_time | Early Morning - (9.30 am)
value         | 570
-[ RECORD 2 ]-+---------------------------
id            | 2
time          | 11:30
humanize_time | Late Morning - (11.30 am)
value         | 690
-[ RECORD 3 ]-+---------------------------
id            | 3
time          | 13:30
humanize_time | Early Afternoon - (1.30pm)
value         | 810
-[ RECORD 4 ]-+---------------------------
id            | 4
time          | 15:30
humanize_time | Late Afternoon - (3.30 pm)
value         | 930

как запустить psql с \x auto?

настроить при запуске, добавив его в .psqlrc в вашей домашней папке и перезапуск psql. смотрите раздел "файлы" в документе psql для получения дополнительной информации.

~/.psqlrc

\x auto

у вас так много вариантов, как можно путать :-)? Основными элементами управления являются:

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

у каждого есть варианты и взаимодействия с другими. Наиболее автоматическими вариантами являются:

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

новая опция " \x auto "переключается на построчное отображение только"при необходимости".

-[ RECORD 1 ]---------------
id          | 6
description | This is a gallery of oilve oil brands.
authority   | I love olive oil, and wanted to create a place for
reviews and comments on various types.
-[ RECORD 2 ]---------------
id          | 19
description | XXX Test A 
authority   | Testing

более старый "формат\pset wrapped" похож на то, что он пытается аккуратно разместить данные на экране, но возвращается к невыровненным, если заголовки не будут соответствовать. Вот пример обернутого:

 id |          description           |            authority            
----+--------------------------------+---------------------------------
  6 | This is a gallery of oilve     | I love olive oil, and wanted to
    ; oil brands.                    ;  create a place for reviews and
    ;                                ;  comments on various types.
 19 | Test Test A                    | Testing

также обязательно проверьте \H,который включает/выключает вывод HTML. Не обязательно легко читать на консоли, но интересно для сброса в файл (см. \o) или вставки в окно редактора/браузера для просмотра, особенно с несколькими строками относительно сложных данных.

одна интересная вещь мы можем просмотреть таблицы горизонтально, без складывания. мы можем использовать PAGER переменные среды. psql использует его. вы можете установить

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

или просто less -S если он уже доступен в командной строке, если не с правильным расположением. -Просмотр разворачивались линии. вы можете передать в любой пользовательский просмотрщик или другие параметры с ним.

Я написал больше в Psql Горизонтальный Дисплей

pspg это простой инструмент, который предлагает расширенное форматирование таблицы, горизонтальная прокрутка, поиск и многие другие функции.

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

затем обязательно обновите PAGER переменной, например, в ~/.bashrc

export PAGER="pspg -s 6" 

здесь -s обозначает цветовую схему (1-14). Если вы используете репозитории pgdg просто установите пакет (в дистрибутиве Debian-like):

sudo apt install pspg

pspg example

можно использовать Зениты для отображения выходных данных запроса в виде таблицы html.

  • сначала реализуем скрипт bash со следующим кодом:

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

    сохранить его как mypager.sh

  • затем экспортируйте пейджер переменной среды, задав полный путь скрипта в качестве значения.

    например: экспорт пейджера='/path/mypager.sh'

  • затем войдите в программу psql, затем выполните команду \H

  • и, наконец, выполнить любой запрос, табличный вывод будет отображаться в zenity в формате таблицы html.