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

316

Я использую 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, которая позволит мне сделать что-то подобное?

user100464
источник

Ответы:

532

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

\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             | 
user100464
источник
8
Вы также можете попробовать формат \ pset с переносом (допустимые форматы не выровнены, выровнены, перенесены, html, latex, troff-ms). Если дисплей достаточно узок, он будет переносить по словам каждый столбец.
Брайс
12
\xодин будет переключать значение, сохраняя вас три нажатия клавиш! (Полезно, когда вы быстро переключаетесь между широкими и узкими выходами).
msanford
7
Если вы ищете эквивалент \Gиз Mysql, попробуйте добавить \x\g\xв конец запроса или определить ярлык при ~/.psqlrcдобавлении \set G '\\set QUIET 1\\x\\g\\x\\set QUIET 0', а затем использовать в конце :G. (обратите внимание на отсутствие точек с запятой)
Славомир Ленарт
5
Можно ли как-то передать " \x on" или эквивалент в командной строке? Было бы хорошо, если бы я мог просто сохранить (например, используя псевдоним оболочки bash), psql --somethingчтобы у меня всегда была включена опция по умолчанию.
machineghost
2
@machineghost Использовать -P expanded=autoили--pset expanded=auto
alecdwm
269

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

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

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

Чтобы получить это используйте: \ 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?

Настройте \x autoкоманду при запуске, добавив ее .psqlrcв свою домашнюю папку и перезапустив psql. Посмотрите раздел «Файлы» в psql doc для получения дополнительной информации .

~ / .Psqlrc

\x auto
notapatch
источник
70

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

# \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 format 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
Брайс
источник
\x autoс \pset pager offхорошим.
Митн
Существуют \x off; \pset format wrappedи \x autoпредназначены для совместного использования , или они взаимно исключают друг друга?
Демитри
20

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

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

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

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

Dineshkumar
источник
1
Ответ действительно хорош. Я удивлен, что это не отмечено выше. Идеально подходит для тех, кто работает в терминале.
LUser
Это было чрезвычайно полезно
Merlin
Это полезно, но как прокрутить вправо?
Ниль де
18

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):

sudo apt install pspg

пример pspg

Tombart
источник
7

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

Wexxor
источник
1

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

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

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

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

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

    например: - export PAGER = '/ path / mypager.sh'

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

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

пурушотаман пуваи
источник