Стань power user'ом PSQL!
Ключ \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'
Примечание
Важно, чтобы таблицы, которые участвуют в переносе, имели одинаковую структуру