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


314

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

Відповіді:


530

Мені просто потрібно було більше часу придивлятися до документації. Ця команда:

\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             | 

8
Ви також можете спробувати \ pset формат завернутий (дозволені формати не вирівнюються, вирівнюються, загортаються, html, латекс, troff-ms). Якщо дисплей досить вузький, він буде обгортати кожен стовпець.
Брайс

12
\xпоодинці переключить значення, заощадивши три натискання клавіш! (Корисно, коли ви швидко переключаєтесь між широкими та вузькими виходами).
msanford

7
Якщо ви шукаєте еквівалент \GMysql, спробуйте додати \x\g\xдо кінця запиту або визначити ярлик у ~/.psqlrcдодаванні \set G '\\set QUIET 1\\x\\g\\x\\set QUIET 0', а потім скористайтеся в кінці :G. (зауважте, відсутність крапки з комою)
Славомір Ленарт

5
Чи можливо якось пропустити " \x on" або еквівалент у командному рядку? Було б добре, якби я міг просто зберегти (наприклад, за допомогою псевдоніма bash shell), psql --somethingщоб у мене завжди була опція включена за замовчуванням.
machineghost

2
@machineghost Use -P expanded=autoor--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 для отримання додаткової інформації .

~ / .psqlrc

\x auto

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 завершений подібний тим, що він намагається акуратно розмістити дані на екрані, але повертається до нерівного, якщо заголовки не підходять. Ось приклад обгортання:

 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хорошим.
mitnk

Існують \x off; \pset format wrappedі \x autoпризначені для спільного використання , або вони взаємно виключають один одного?
Демітрі

20

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

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

або просто less -Sякщо його вже доступно в командному рядку, якщо не у відповідному розташуванні. -S для перегляду розгорнутих ліній. ви можете передати його будь-якому користувальницькому переглядачу чи іншим параметрам.

Я більше писав у горизонтальному дисплеї Psql


1
Відповідь справді хороша. Я здивований, що вона не відзначена вище. Ідеально підходить для всіх, хто працює в терміналі.
Люсер

Це було надзвичайно корисно
Мерлін

Це корисно, але як прокрутити праворуч?
Ніль де Мокрий

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


7

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


1

ви можете використовувати zenity для відображення результатів запиту у вигляді HTML-таблиці.

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

    кішка> '/tmp/sql.op'; zenity --text-info --html --filename = '/ tmp / sql.op';

    збережіть його як mypager.sh

  • Потім експортуйте змінну середовища PAGER, встановивши повний шлях сценарію як значення.

    наприклад: - експортувати PAGER = '/ path / mypager.sh'

  • Потім увійдіть у програму psql і виконайте команду \ H

  • І, нарешті, виконайте будь-який запит, виведений в таблиці формат відображатиметься у форматі html-таблиці.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.