Содержание

Предыдущий раздел

Установка последней версии PostgreSQL на Debian и Ubuntu

Следующий раздел

Структура каталогов и файлов PostgreSQL

psql - консольная утилита для работы с PostgreSQL

Стань power user'ом PSQL!

Вывод peзультатов запроса не в строку, а столбцом

Ключ \x

Покажу на примере, как это выглядит (это очень хорошо работает на запросах со множеством столбцов и "узким" экраном)

denis=# select * from pg_stat_activity;

 datid  | datname | procpid | usesysid | usename | application_name | client_addr | client_hostname | client_port |         backend_start         |          xact_start          |         query_start          | waiting |          current_query
--------+---------+---------+----------+---------+------------------+-------------+-----------------+-------------+-------------------------------+------------------------------+------------------------------+---------+---------------------------------
 629830 | denis   |   13205 |   629829 | denis   | psql             |             |                 |          -1 | 2012-11-10 11:57:05.634017+06 | 2012-11-10 11:59:11.27402+06 | 2012-11-10 11:59:11.27402+06 | f       | select * from pg_stat_activity;
(1 row)


-- Включаю альтернативный режим отображения результатов запроса


denis=# \x
Expanded display is on.

denis=# select * from pg_stat_activity;

-[ RECORD 1 ]----+--------------------------------
datid            | 629830
datname          | denis
procpid          | 20187
usesysid         | 629829
usename          | denis
application_name | psql
client_addr      |
client_hostname  |
client_port      | -1
backend_start    | 2012-11-07 23:29:00.264029+06
xact_start       | 2012-11-07 23:29:47.653051+06
query_start      | 2012-11-07 23:29:47.653051+06
waiting          | f
current_query    | select * from pg_stat_activity;

Выход в шел без прерывания сессии работы с базой данных

Ключ \!

denis=# \!

denis@server:~$ ls -l
total 126172
drwxr-xr-x  2 denis denis      4096 Oct 21 10:28 Desktop
drwxr-xr-x  3 denis denis      4096 Nov  5 10:03 Documents
drwxr-xr-x 14 denis denis     12288 Nov  7 16:45 Downloads
drwx------ 11 denis denis      4096 Nov  7 08:19 Dropbox
drwxr-xr-x 19 denis denis      4096 Sep 30 23:03 Music
drwxr-xr-x  3 denis denis      4096 Oct  9 12:44 Pictures
drwxrwxr-x 11 denis denis      4096 Nov  3 17:27 Projects
drwxr-xr-x  2 denis denis      4096 Sep 26 20:03 Public
drwxrwxr-x  2 denis denis      4096 Sep 27 10:17 Snapshots
drwxr-xr-x  2 denis denis      4096 Sep 26 20:03 Templates

denis@server:~$ exit
exit

denis=# \q

denis@server: ~$

Редактирование запросов во внешнем редакторе

Многострочные запросы очень неудобно редактировать в стандартной строке psql. Но есть возможность редактировать запросы во внешнем редакторе.

Ключ \e

При вводе ключа \e запускается внешний редактор, в котором уже содержится последний запрос, который был введен в psql. Запрос можно отредактировать или ввести новый, сохранить файл и выйти из редактора. Если в конце запроса стоит точка с запятой, то запрос будет выполнен сразу после закрытия редактора. В противном случае, чтобы запрос выполнился, надо будет ввести точку с запятой уже в psql и нажать ENTER.

За то, какой редактор вызывается, отвечает переменная окружения PSQL_EDITOR, которую можно настроить на vim:

export PSQL_EDITOR="vim"

Прокрутка результата выполнения запроса вперед/назад

Довольно часто в дистрибутивах linux в качестве программы для постраничного вывода результатов выполнения запросов используется программа more, которую не всегда удобно использовать для интерактивной работы с результатом запроса (производить поиск, прокручивать результат запрос вверх/вниз, выводить результат запроса с использованием переноса строк).

Выход есть! Можно заменить more на less, которая позволяет интерактивно работать с результатом запроса. Для этого необходимо установить следующие переменные окружения:

export PAGER="less"
export LESS="-iMSx4 -FX"

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

Примечание

Есть неприятная особенность работы с less, если приходится прокручивать результат запроса вправо/влево - в этом случае, генерируется много пустых экранов, которые занимают много места вверху терминала (опция X). Однако часто эта небольшая неприятность перекрывается остальными преимуществами less

Включить/отключить постраничный вывод результата запроса можно опцией

\pset pager [always|off]

Время выполнения запроса

Вывод времени выполнения запрос выключается опцией \timing

denis=# \timing
Timing is on.
denis=# select 1;
 ?column?
----------
        1
(1 row)

Time: 0.280 ms

Редактирование хранимой процедуры

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

Для этого служит опция \ef <procedure name>

При использовании этой опции запускается редактор, указанный в переменной окружения PSQL_EDITOR

Сохранения результатов запросов в файл

Ключ \copy позволяет импортировать целые таблицы или результаты запросов в файлы и экспортировать данных из файлов в таблицы. Это бывает полезно, если надо переместить данные какой-то таблицы между базами данных.

Пример:

Есть таблица customers (id int4, first_name varchar(64), last_name varchar(64)). Её нужно перенести в другую базу данных в таблицу temp_customers

Сохраняю содержимое таблицы в файл customers.dump:

db1# \copy customers to 'customers.dump'

Загружаю содержимое файла в другую таблицу:

db2# \copy temp_customers from 'customers.dump'

Примечание

Важно, чтобы таблицы, которые участвуют в переносе, имели одинаковую структуру

Поиск по прошлым запросам

Поиск по запросам под OS linux работает аналогично поиску в BASH'е. Находясь в консоле, надо нажать CTRL+R

Появляется приглашение ввести буквы, по которым будет производиться поиск

denis=#
(reverse-i-search)`':

По мере ввода букв уточняется запрос, который вы ищите.

denis=#
(reverse-i-search)`dr': drop sequence eobjects_objects_15_id_seq;

Дополнительные горячие клавиши для управления режимом поиска

  • ENTER - выполнение найденного запрос
  • ESC - переход в режим редактирования найденного запроса
  • CTRL+R - циклический перебор sql-запросов, которые соответствуют введенной строке поиска
  • CTRL+G - закрытие режима поиска без выполнения запроса
comments powered by Disqus