psql
Эта страница переведена при помощи нейросети GigaChat.
В подразделе «Совместимость psql» приведено описание совместимости утилиты при использовании различных версий клиентской и серверной частей СУБД Pangolin.
psql
— интерактивный терминал PostgreSQL.
Синтаксис
psql [option...] [dbname [username]]
Описание
psql
— терминальный клиент для взаимодействия с PostgreSQL. Она позволяет выполнять SQL-запросы в интерактивном режиме, передавать их серверу и просматривать результаты. Также psql
поддерживает чтение команд из файлов или аргументов командной строки. Помимо этого, psql
предлагает набор метакоманд и функций, схожих с возможностями командной оболочки, что делает ее удобным инструментом для создания сценариев и автоматизации различных операций.
Совместимость psql
Клиент psql
совместим со всеми поддерживаемыми версиями СУБД Pangolin, при этом его функциональность соответствует мажорной версии сервера и ограничивается версиями API, предоставляемыми операционными системами клиента и сервера (например, OpenSSL).
psql
сохраняет обратную совместимость с поддерживаемыми версиями СУБД Pangolin, чьи мажорные версии ниже текущей, при условии, что они находятся в рамках жизненного цикла поддержки и совместимы с соответствующими версиями API.
Клиент psql
работает с логическими дампами, созданными с помощью pg_dump
и pg_dumpall
в формате plain
, если версия этих утилит соответствует мажорной версии, используемой на клиенте.
Метакоманды psql
совместимы как с текущей мажорной версией СУБД, так и с более ранними мажорными версиями в рамках срока их поддержки.
Содержание встроенной справки (\help
) в psql
соответствует текущей мажорной версии СУБД.
Параметры
Для клиента psql
существуют следующие параметры командной строки:
-a
--echo-all
- Выводит в стандартный вывод все непустые строки ввода по мере их чтения, за исключением интерактивного ввода. Аналогично установке переменной
ECHO
в значенииall
.
-A
--no-align
- Переключает вывод в режим без выравнивания (по умолчанию используется формат
aligned
). Аналогично метакоманде\pset format unaligned
.
-b
--echo-errors
- Показывает SQL-команды, завершившиеся ошибкой, в стандартном потоке ошибок. Аналогично установке переменной
ECHO
в значенииerrors
.
-c command
--command=command
- Указывает строку команды
comand
, которую нужно выполнить. Параметр можно указать несколько раз и использовать совместно с параметром-f
. Если присутствует хотя бы один из параметров-c
или-f
,psql
не будет читать команды из стандартного ввода, а завершит выполнение после последовательной обработки всех таких параметров.Значение команда должно быть либо полной SQL-командой, которую целиком обрабатывает сервер (то есть без использования специфических для
psql
конструкций), либо одной метакомандойpsql
, начинающейся с обратной косой черты. Нельзя смешивать SQL и метакоманды в одной строке при использовании-c
. Чтобы выполнить и SQL, и метакоманды, можно указать несколько-c
, например:
psql -c '\x' -c 'SELECT * FROM foo;'
или передать команды через стандартный ввод:
echo '\x \\ SELECT * FROM foo;' | psql
В этом примере \
используется как разделитель метакоманд.
Каждая строка, переданная через -c
, отправляется серверу как единичный SQL-запрос. Если в строке несколько SQL-команд, они будут выполнены как одна транзакция, если только внутри строки явно не заданы команды BEGIN
и COMMIT
. Подробнее о поведении сервера при обработке нескольких запросов описано в разделе «Несколько операторов в простом запросе».
Если требуется выполнение всех команд в одной транзакции, используйте несколько параметров -c
или передайте команды через стандартный ввод psql
, например, с помощью echo
, как показано выше, либо создаваемый прямо в оболочке текст, например:
psql <<EOF
\x
SELECT * FROM foo;
EOF
--csv
- Устанавливает формат вывода в CSV (значения, разделенные запятыми). Аналогично метакоманде
\pset format csv
.
-d dbname
--dbname=dbname
- Задает имя базы данных для подключения. Равнозначно указанию
dbname
как первого параметра без ключа в командной строке.dbname
может быть строкой подключения. В этом случае параметры строки подключения имеют приоритет над одноименными параметрами командной строки.
-e
--echo-queries
- Дублирует все отправляемые на сервер SQL-команды в стандартный вывод. Аналогично установке переменной
ECHO
в значенииqueries
.
-E
--echo-hidden
- Выводит фактические запросы, генерируемые
\d
и другими командами, начинающимися с обратной косой черты\
. Это можно использовать для изучения внутренних операций вpsql
. Аналогично установке переменнойECHO_HIDDEN
в значенииon
.
-f filename
--file=filename
- Чтение команд из файла
filename
вместо стандартного ввода. Параметр можно указывать несколько раз и комбинировать с параметром-c
в любом порядке. Если задан хотя бы один из параметров-f
или-c
,psql
не будет использовать стандартный ввод и завершит выполнение после обработки всех команд, переданных через-f
и-c
, в порядке их указания. Аналогично метакоманде\i
, за исключением особенностей запуска.Если в качестве
filename
указано-
, команды будут считываться из стандартного ввода до достижения конца файла (EOF) или выполнения команды\q
. Это позволяет чередовать интерактивный ввод с вводом из файлов. Однако следует учитывать, что в этом режиме не используется поддержка Readline (аналогично указанию параметра-n
).Хотя команды можно передавать и через стандартное перенаправление ввода (например,
psql < filename
), использование-f
дает преимущества — такие как отображение ошибок с указанием номеров строк и (в некоторых случаях) более быстрая и эффективная обработка.
-F separator
--field-separator=separator
- Задает разделитель полей
separator
для невыровненного вывода. Аналогично метакомандам\pset fieldsep
или\f
.
-h host
--host = host
- Указывает хост компьютера, на котором запущен сервер. Если значение начинается с косой черты, выполняется подключение к Unix-сокету.
-H
--html
- Переводит вывод в HTML-формат. Аналогично метакомандам
\pset format html
или\H
.
-l
--list
- Выводит список всех доступных баз данных и завершает выполнение. Все параметры, не касающиеся подключения, игнорируются. Аналогично метакоманде
\list
.Если база данных явно не указана (например, через параметр
-d
или аргумент без параметра, возможно через запись службы, но не через переменную окружения),psql
подключается к базе данныхpostgres
.
-L filename
--log-file=filename
- Записывает результаты выполнения запросов в указанный файл
filename
, в дополнение к обычному месту назначения вывода.
-n
--no-readline
- Отключает поддержку Readline (редактирование строк, история ввода). Подробнее описано ниже в разделе «Редактирование командной строки».
-o filename
--output=filename
- Перенаправляет вывод запросов в указанный файл
filename
. Аналогично метакоманде\o
.
-p port
--port = port
- Указывает TCP-порт или расширение файла локального Unix-сокета для подключения к серверу. Значение по умолчанию берется из переменной окружения
PGPORT
или задается при компиляции, обычно 5432.
-P assignment
--pset=assignment
- Устанавливает параметры форматирования вывода, аналогично метакоманде
\pset
. Обратите внимание, что имя параметра и значение разделяются знаком равенства, а не пробела. Например, чтобы установить формат вывода на LaTeX, нужно написать-P format=latex
.
-q
--quiet
- Подавляет приветствие и информационные сообщения (вывод по умолчанию). Полезно с параметром
-c
.
-R separator
--record-separator=separator
- Устанавливает разделитель записей
separator
для невыровненного формата. Аналогично метакоманде\pset recordsep
.
-s
--single-step
- Включает пошаговый режим выполнения с подтверждением перед каждой командой. Используется для отладки сценариев.
-S
--single-line
- Включает однострочный режим: каждая новая строка рассматривается как завершение команды SQL (эквивалентно точке с запятой
;
).примечаниеЭтот режим существует для тех, кто предпочитает его использование, но не является обязательным. Если комбинируете SQL и метакоманды в одной строке, порядок выполнения может быть неочевидным.
-t
--tuples-only
- Отключает заголовки столбцов и результирующей строки с количеством выбранных записей. Аналогично метакомандам
\pset tuples_only
или\t
.
-T table_options
--table-attr=table_options
- Задает HTML-атрибуты для тега
<table>
. Подробнее об этом в описании метакоманды\pset tableattr
.
-U username
--username=username
- Указывает имя пользователя для подключения вместо подразумеваемого по умолчанию (требует соответствующего разрешения).
-v assignment
--set=assignment
--variable=assignment
- Позволяет установить переменные
psql
Аналогично метакоманде\set
. Значение переменной должно быть задано с помощью знака равенства (=
).Чтобы установить переменную без значения, укажите знак равенства, но не пишите значение (
-v var=
). Чтобы сбросить переменную, укажите только имя без знака равенства (-v var
).Эти назначения выполняются во время разбора командной строки, и переменные, связанные с подключением, могут быть переопределены позже в процессе запуска.
-V
--version
- Выводит версию
psql
и завершается.
-w
--no-password
- Отключает запрос на ввод пароля. Если сервер требует аутентификации по паролю и пароль недоступен другими способами, такими как файл
.pgpass
, попытка подключения завершится неудачей. Параметр полезен в пакетных заданиях и сценариях, где нет пользователя, который мог бы ввести пароль.Обратите внимание, что параметр действует на протяжении всего сеанса и, таким образом, влияет на метакоманду
\connect
, а так же на первую попытку подключения.
-W
--password
- Запрашивает пароль перед подключением к базе данных, даже если пароль не будет использоваться..
Параметр не является обязательным, поскольку
psql
автоматически запросит пароль, если сервер требует аутентификацию паролем. Однакоpsql
потратит попытку подключения, чтобы выяснить, что сервер хочет пароль. В некоторых случаях стоит ввести-W
, чтобы избежать дополнительной попытки подключения.Обратите внимание, что параметр действует на протяжении всего сеанса и, таким образом, влияет на метакоманду
\connect
, а так же на первую попытку подключения.
-x
--expanded
- Включает расширенный (вертикальный) режим вывода. Аналогично метакомандам
\pset expanded
или\x
.
-X,
--no-psqlrc
- Не читает конфигурационные файлы запуска (ни системный файл
psqlrc
, ни пользовательский файл~/.psqlrc
).
-z
--field-separator-zero
- Устанавливает разделитель полей для невыровненного вывода равным нулю. Аналогично метакоманде
\pset fieldsep_zero
.
-0
--record-separator-zero
- Устанавливает разделитель записей невыровненного вывода равным нулю. Аналогично метакоманде
\pset fieldsep_zero
. Полезно при взаимодействии, например, сxargs -0
.
-1
--single-transaction
- Используется вместе с одним или несколькими параметрами
-c
и/или-f
, чтобы выполнить все команды в рамках одной транзакции. Перед выполнением первой командыpsql
отправляетBEGIN
, а после последней —COMMIT
. Если какая-либо команда завершится с ошибкой и установлена переменнаяON_ERROR_STOP
, выполняется откат транзакции (ROLLBACK
).Внимание!Если переданные команды уже содержат
BEGIN
,COMMIT
илиROLLBACK
, этот параметр может не сработать как ожидается. Также, если одна из команд несовместима с транзакционным блоком, это приведет к провалу всей транзакции.
-?
--help[=topic]
- Показывает справку по
psql
и завершается. Необязательный параметрtopic
, выбирает, какая частьpsql
объясняется:commands
описывает команды обратной косой чертыpsql
,options
описывает параметры командной строки (по умолчанию), которые могут быть переданыpsql
иvariables
показывает помощь по переменным конфигурацииpsql
.
Код завершения
psql
завершает работу со следующими кодами завершения:
- 0 — успешное завершение работы;
- 1 — фатальная внутренняя ошибка, такая как невозможность выделения памяти или отсутствие файла;
- 2 — потеря соединения с сервером в неинтерактивном режиме;
- 3 — ошибка выполнения SQL-команды при установленном параметре
ON_ERROR_STOP
.
Использование
Подключение к базе данных
psql является обычным клиентским приложением PostgreSQL. Чтобы подключиться к базе данных, необходимо знать название целевой базы данных, имя хоста и номер порта сервера, а также имя пользователя базы данных, от имени которого хотите подключаться. Параметры psql могут быть переданы через аргументы командной строки:
- имя базы данных (
-d
); - хост (
-h
); - порт (
-p
); - имя пользователя (
-U
).
Если аргумент найден, который не принадлежит никакой опции, он интерпретируется как имя базы данных (или имя пользователя базы данных, если уже дано имя базы данных).
Если один или несколько параметров не заданы, используются значения по умолчанию:
- имя базы данных и имя пользователя — совпадают с именем текущего пользователя операционной системы;
- хост — локальный сокет домена Unix или
localhost
при отсутствии поддержки сокетов; - порт — стандартный порт PostgreSQL, заданный во время компиляции.
Обратите внимание, что нельзя просто подключиться к любой базе данных под любым именем пользователя. Узнать о доступных правах можно у администратора баз данных.
Альтернативно, параметры подключения могут быть заданы в виде строки подключения (conninfo
) или URI:
$ psql "service=myservice sslmode=require"
$ psql postgresql://dbmaster:5433/mydb?sslmode=require
Также параметры подключения можно задать через переменные окружения:
PGDATABASE
PGUSER
PGHOST
PGPORT
Для автоматической аутентификации по паролю рекомендуется использовать файл ~/.pgpass
.
Также поддерживается использование LDAP для получения параметров подключения.
Если подключение установить не удалось, psql
завершит работу с сообщением об ошибке.
Если и стандартный ввод, и вывод — это терминалы, psql
автоматически устанавливает клиентскую кодировку в режим auto
, используя настройки локали (например, переменную LC_CTYPE
в Unix-системах). При необходимости ее можно переопределить, установив переменную PGCLIENTENCODING
.
Ввод SQL-команд
При нормальной работе psql
предоставляет подсказку с именем базы данных, к которой в данный момент подключен psql
, за которым следует строка =>
. Например:
Подсказка psql
состоит из имени базы данных, к которой psql
в данный момент подключен, за которым следует строка =>
, например:
$ psql testdb
psql (17.5)
Type "help" for help.
testdb=>
В этом режиме пользователь может вводить SQL-команды. Команда считается завершенной, когда вводится точка с запятой (;
). Просто нажать Enter
недостаточно — это позволяет писать команды в несколько строк для удобства и читаемости. После отправки команда передается серверу, и, если выполнена успешно, результат отображается в терминале.
Безопасность
Если в системе есть ненадежные пользователи, убедитесь, что не работаете с общедоступными схемами, доступными на запись. Для этого удалите такие схемы из search_path
, указав его явно либо в строке подключения, либо как параметр options=-csearch_path=
перед остальными SQL-командами. Это касается не только psql
, но и любых интерфейсов, которые могут исполнять произвольные SQL-запросы.
После каждой выполненной команды psql
также проверяет наличие уведомлений, отправленных через команды LISTEN и NOTIFY.
Хотя блочные комментарии в стиле C передаются серверу для обработки и удаления, комментарии стандарта SQL удаляются psql
.
Метакоманды
Любая строка в psql
, начинающаяся с обратной косой черты (\
), считается метакомандой psql
, которая обрабатывается самим клиентом, а не сервером PostgreSQL. Эти команды упрощают администрирование и написание скриптов. Часто их называют «командами слеша» или «обратного слеша».
Метакоманда начинается с \
, за которым следует название команды, а затем — аргументы. Аргументы отделяются от команды и друг от друга пробельными символами (одним или несколькими).
Если в аргументе нужно сохранить пробелы, его следует заключить в одинарные кавычки. Чтобы добавить саму одинарную кавычку внутрь такого аргумента, нужно использовать две подряд. Аргументы в одинарных кавычках подлежат заменам, принятым в языке C: \n
(новая строка), \t
(табуляция), \b
(возврат назад), \r
(возврат каретки), \f
(перевод страницы), \digits
(восьмеричное число), и \xdigits
(шестнадцатеричное число). Если внутри текста в одинарных кавычках встречается обратная косая перед любым другим символом, то она экранирует этот символ.
Если в аргументе без кавычек встречается :
с последующим именем переменной psql
, она заменяется значением переменной, как описано в разделе «Интерполяция SQL» ниже. Также доступны формы :'variable_name'
и :"variable_name"
, работающие аналогично. С помощью конструкции :{?variable_name}
можно проверить, существует ли переменная: результатом будет TRUE
или FALSE
. Чтобы предотвратить замену, перед двоеточием ставится обратная косая черта (\:
).
Текст, заключенный в обратные кавычки, воспринимается как командная строка, которая передается в командную оболочку операционной системы. Результат ее выполнения (без завершающей новой строки) подставляется вместо текста в обратных кавычках. Внутри такого блока нет дополнительного экранирования, но переменные psql
подставляются: как в виде :variable_name
, так и в форме :'variable_name'
, причем последняя предпочтительнее — она гарантирует, что значение будет передано как один аргумент оболочке. Если переменная содержит символы возврата каретки или перевода строки, форма :'variable_name'
вызовет ошибку, так как такие символы не всегда безопасно обрабатывать на разных платформах.
Некоторые команды требуют аргумент в виде SQL-идентификатора (например, имени таблицы). Такие аргументы подчиняются SQL-правилам: буквы без кавычек автоматически приводятся к нижнему регистру, а заключенные в двойные кавычки ("..."
) сохраняют регистр и могут содержать пробелы. В двойных кавычках парные двойные кавычки сводятся к одной двойной кавычке в полученном имени. К примеру, FOO"BAR"BAZ
преобразуется в fooBARbaz
, а "A weird"" name"
— в A weird" name
.
Анализ аргументов метакоманды завершается либо в конце строки, либо при появлении символа обратного слеша \
, который интерпретируется как начало новой метакоманды. Специальная последовательность \\
используется для завершения списка аргументов метакоманды и продолжения анализа SQL-команд, если они есть. Это позволяет комбинировать SQL и метакоманды в одной строке. Однако аргументы метакоманды не могут продолжаться за пределами строки.
Многие метакоманды работают с текущим буфером запроса — это временное хранилище SQL-команды, который был введен, но еще не отправлен серверу для выполнения. В буфер включаются как строки, введенные ранее, так и SQL-текст перед метакомандой в той же строке.
Определены следующие метакоманды:
\a
- Переключает режим выравнивания вывода. Если используется выровненный формат (
aligned
), он отключается, и наоборот. Команда оставлена для обратной совместимости. Для более гибкой настройки используйте\pset
.
\bind [ parameter ] ...
- Устанавливает параметры запроса для следующего выполнения запроса, передав указанные параметры для любых заполнителей параметров (
$1
и т.п.).
Пример:
INSERT INTO tbl1 VALUES ($1, $2) \bind 'first value' 'second value' \g
Это также работает для команд выполнения запросов помимо \g
, таких как \gx
и \gset
.
Эта команда приводит к использованию протокола расширенных запросов, в отличие от обычного режима работы psql, который использует простой протокол запроса. Таким образом, эта команда может быть полезна для тестирования протокола расширенных запросов из psql. Расширенный протокол запроса используется даже если запрос не имеет параметров и данная команда указывает ноль параметров. Эта команда влияет только на следующий выполняемый запрос, все последующие запросы будут использовать по умолчанию простой протокол запроса.
\c
\connect [ -reuse-previous=on|off ] [ dbname [ username ] [ host ] [ port ] | conninfo ]
- Устанавливает новое соединение с сервером PostgreSQL. Подключение можно выполнить, указав параметры позиционно (имя базы данных, пользователя, хоста, порта) или через строку подключения
conninfo
. Если параметры не указаны, подключение будет выполнено с использованием текущих значений. Символ-
вместо любого из параметров позиционного синтаксиса означает его пропуск.Новое соединение может повторно использовать параметры соединения от предыдущего соединения; не только имя базы данных, пользователь, хост и порт, но и другие настройки, такие как
sslmode
. По умолчанию параметры предыдущего соединения переиспользуются при позиционном вводе, но не при использовании строкиconninfo
. Поведение можно переопределить с помощью-reuse-previous=on|off
. При повторном использовании, любые неуказанные явно параметры берутся из последнего успешного соединения. Исключение: если хост изменяется позиционно, то параметрhostaddr
из предыдущего соединения игнорируется. Также пароль будет переиспользован только при сохранении тех же значений пользователя, хоста и порта. Если какой-либо параметр не указан в этой команде и не используется повторно, действует принятое вlibpq
значение по умолчанию.При успешном подключении предыдущее соединение закрывается. Если подключение не удалось, поведение зависит от режима работы: в интерактивном режиме старое соединение сохраняется, в неинтерактивном — закрывается, и выполнение скрипта может завершиться ошибкой. Повторное использование параметров при неудачном
\connect
в неинтерактивном режиме не допускается.Примеры:
=> \c mydb myuser host.dom 6432
=> \c service=foo
=> \c "host=localhost port=5432 dbname=mydb connect_timeout=10 sslmode=disable"
=> \c -reuse-previous=on sslmode=require -- changes only sslmode
=> \c postgresql://tom@localhost/mydb?application_name=myapp
\C [title]
- Устанавливает или убирает заголовок таблицы, отображаемой в результате выполнения запроса. Аналогично метакоманде
\pset title
.
\cd [directory]
- Меняет текущий рабочий каталог на указанный путь
directory
. Если путь не задан, происходит переход в домашнюю директорию пользователя.СоветЧтобы узнать текущий рабочий каталог, выполните
\! pwd
.
\conninfo
- Выводит параметры текущего подключения к базе данных.
\copy { table [ ( column_list ) ] } from { 'filename' | program 'command' | stdin | pstdin } [ [ with ] ( option [, ...] ) ] [ where condition ]
\copy { table [ ( column_list ) ] | ( query ) } to { 'filename' | program 'command' | stdout | pstdout } [ [ with ] ( option [, ...] ) ]
- Копирует данные между таблицей PostgreSQL и локальной файловой системой с помощью клиента. Это аналог SQL-команды COPY, но операции чтения/записи выполняются
psql
, а не сервером. Это означает, что доступ к файлам осуществляется от имени локального пользователя, и не требуются права суперпользователя.При использовании
program
команда запускается клиентом, и данные передаются между сервером и внешней программой. Это также не требует суперпользовательских прав.Вариант
\copy ... from stdin
читает данные из текущего источника ввода, пока не встретит\.
или конец файла (EOF). Этот вариант полезен для заполнения таблиц внутри файла сценария SQL.\copy ... to stdout
выводит данные в текущий поток вывода без сообщенияCOPY count
. Используйтеpstdin
иpstdout
, чтобы принудительно использовать стандартные потоки независимо от текущих настроекpsql
.Вся строка после
\copy
рассматривается как аргументы команды, без подстановки переменных и выполнения обратных кавычек.СоветАльтернативный способ: использовать SQL-команду
COPY ... TO STDOUT
с последующим\g filename
или\g |program
. Этот способ позволяет разбивать команду на несколько строк и использовать интерполяцию переменных и расширение обратных кавычек.\copy
менее эффективен, чем серверная командаCOPY
, так как данные передаются через клиент-серверное соединение. Для больших объемов данных рекомендуется использовать серверную версию. Также в режиме CSV команда\copy ... from
может ошибочно интерпретировать строку\.
как конец ввода.
\copyright
- Выводит лицензионную информацию и условия распространения PostgreSQL.
\crosstabview [ colV [ colH [ colD [ sortcolH ] ] ] ]
- Выполняет текущий SQL-запрос (аналогично
\g
) и отображает результаты в виде перекрестной таблицы. Требуется минимум три столбца в результатах:colV
: вертикальный заголовок (по умолчанию первый столбец);colH
: горизонтальный заголовок (по умолчанию второй столбец);colD
: значение внутри ячеек (если не задан, берется оставшийся столбец);sortcolH
: определяет необязательный столбец сортировки для горизонтального заголовка.
Каждый параметр может быть задан как по имени, так и по номеру (нумерация с 1). Имена столбцов обрабатываются по правилам SQL — с учетом регистра и кавычек. Если параметры
colV
иcolH
не указаны, используются первый и второй столбцы результата соответственно. Они не должны совпадать. ЕслиcolD
не задан, предполагается, что в запросе ровно три столбца, и третий будет использоваться какcolD
.Вертикальные заголовки (в первом столбце) формируются из уникальных значений
colV
в порядке их появления в результатах запроса без дубликатов. Горизонтальные заголовки (первая строка) — из уникальных значений ``colHтакже в порядке их появления без дубликатов, если не задан параметр
sortcolH. Если
sortcolH` указан, заголовки сортируются по значениям этого столбца, который должен содержать целые числа.Каждая ячейка таблицы соответствует паре значений из
colH
иcolV
, и содержит значение изcolD
той строки, где они совпадают. Если подходящих строк нет — ячейка остается пустой. Если найдено несколько совпадающих строк — возникает ошибка.
\d[S+] [pattern]
- Выводит подробную информацию о каждой таблице, представлении, материализованном представлении, индексе, последовательности, внешней таблице или составном типе, соответствующем
pattern
. Включает список столбцов, их типы, табличное пространство (если отличается от стандартного), ограничения (NOT NULL
, значения по умолчанию), связанные индексы, ограничения, правила и триггеры. Для внешних таблиц также отображается внешний сервер. «Соответствие шаблону» определено в разделе Шаблоны ниже.Для некоторых типов связей, команда
\d
показывает дополнительную информацию для каждого столбца: значения столбцов для последовательностей, индексированные выражения для индексов и параметры внешнего обертки данных для внешних таблиц.Команда
\d+
дополнительно показывает комментарии, наличие OID, определение представления, настройку идентичности реплики (REPLICA IDENTITY) и имя метода доступа, если он задан.Без
pattern
эквивалентно метакоманде\dtvmsE
, которая покажет список всех видимых таблиц, представлений, материализованных представлений, последовательностей и внешних таблиц. По умолчанию системные объекты скрыты, используйте шаблон или аргументS
для их отображения.
\da[S] [pattern]
- Выводит агрегатные функции, их тип возвращаемого значения и типы входных данных. Если указан
pattern
, фильтрует агрегаты по имени. Системные объекты показываются только при использовании шаблона или аргументаS
.
\dA[+] [pattern]
- Выводит зарегистрированные методы доступа. Если указан
pattern
, отображаются только те методы доступа, чьи имена соответствуют шаблону. Если+
добавляется к имени команды, каждый метод доступа выводится с его связанной функцией обработки и описанием.
\dAc[+] [access-method-pattern [input-type-pattern]]
- Выводит классы операторов для методов доступа. Если указано значение access-method-pattern, то будут выведены только те классы операторов, которые связаны с методами доступа, имена которых соответствуют указанному шаблону. Если указано значение
input-type-pattern
, то будут выведены только те классы операторов, которые связаны с типами ввода, имена которых соответствуют указанному шаблону. При добавлении+
выводит также операторные семьи и владельца. Фильтрация возможна по методу доступа и типу ввода.
\dAf[+] [access-method-pattern [input-type-pattern]]
- Выводит семейства операторов. Если указано значение
access-method-pattern
, то будут выведены только семейства операторов, связанные с методами доступа, имена которых соответствуют указанному шаблону. Если указано значениеinput-type-pattern
, то будут выведены только семейства операторов, связанные с типами ввода, имена которых соответствуют указанному шаблону. При добавлении+
выводит также владельца. Можно фильтровать по методу доступа и типу ввода.
\dAo[+] [access-method-pattern [operator-family-pattern]]
- Выводит операторы в составе семейств операторов. Если указано значение
access-method-pattern
, то будут выведены только члены семейств операторов, связанных с методами доступа, имена которых соответствуют указанному шаблону. Если указано значениеoperator-family-pattern
, то будут выведены только члены семейств операторов, чьи имена соответствуют указанному шаблону. При использовании+
выводится информация о сортировке (если применимо).
\dAp[+] [access-method-pattern [operator-family-pattern]]
- Выводит функции, поддерживаемые семействами операторов. Если указан
access-method-patter
, то перечисляются только функции семейств операторов, связанных с методами доступа, имена которых соответствуют этому шаблону. Если указанoperator-family-pattern
, то перечисляются только функции семейств операторов, чьи имена соответствуют этому шаблону. При+
выводит детальные сигнатуры функций.
\db[+] [pattern]
- Выводит табличные пространства. Можно фильтровать по имени табличного пространства. При использовании
+
дополнительно выводит параметры, размер, права и описание.
\dc[S+] [pattern]
- Выводит преобразования между кодировками.Можно фильтровать по имени преобразования. По умолчанию отображаются только объекты, созданные пользователем. Используйте
+
для отображения описания. Системные объекты выводятся при использованииS
или шаблона.
\dconfig[+] [pattern]
- Выводит текущие параметры конфигурации сервера. Можно фильтровать по имени параметра. Без аргументов — только параметры, отличающиеся от значений по умолчанию,
+
включает типы, контексты и права.
\dC[+] [pattern]
- Выводит доступные преобразования типов. Можно фильтровать по исходным или целевым типам приведения. При использовании
+
дополнительно выводит описание.
\dd[S] [pattern]
- Выводит описания объектов типа
constraint
,operator class
,operator family
,rule
, иtrigger
. Все остальные комментарии могут быть просмотрены соответствующими командами для этих типов объектов.\dd
отображает описания для объектов, соответствующихpattern
, или видимых объектов соответствующего типа, если аргумент не указан. Но в любом случае, перечислены только те объекты, которые имеют описание. По умолчанию отображаются только созданные пользователем объекты; предоставьте шаблон или арзументS
, чтобы включить системные объекты.Описания объектов могут быть созданы с помощью команды COMMENT SQL.
\dD[S+] [pattern]
- Выводит домены. Можно фильтровать по имени домена. По умолчанию отображаются только созданные пользователем объекты. Чтобы включить системные объекты, укажите шаблон или аргумент
S
. При использовании+
отображает также разрешения и описание.
\ddp [pattern]
- Выводит пользовательские настройки привилегий по умолчанию. Запись отображается для каждой роли (и схемы, если применимо), для которой настройки привилегий по умолчанию были изменены от встроенных значений по умолчанию. Можно фильтровать по имени роли или схемы.
Команда ALTER DEFAULT PRIVILEGES используется для установки привилегий доступа по умолчанию. Значение отображения привилегий объясняется в разделе «Привилегии».
\dE[S+] [pattern]
\di[S+] [pattern]
\dm[S+] [pattern]
\ds[S+] [pattern]
\dt[S+] [pattern]
\dv[S+] [pattern]
- Отображает различные объекты базы данных. Буквы
E
,i
,m
,s
,t
,v
обозначают соответственно:E
— внешние таблицы;i
— индексы;m
— материализованные представления;s
— последовательности;t
— таблицы;v
— представления.
Комбинируйте эти буквы в любой последовательности, чтобы отфильтровать нужные типы объектов. Например, команда
\dti
отобразит таблицы и индексы. Форма с+
(например,\dt+
,\dti+
) добавляет к выводу информацию о типе хранения (постоянный, временный, неопределенный), размере и описании объекта. Если заданpattern
, вывод ограничивается объектами, имена которых соответствуют шаблону. По умолчанию системные объекты скрыты, но их можно показать, указав шаблон или аргументS
.
\des[+] [pattern]
- Выводит список внешних серверов. При использовании
+
выводятся также тип, версия, параметры, привилегии и описание сервера. Можно фильтровать по имени сервера.
\det[+] [pattern]
- Выводит внешние таблицы. При наличии
+
выводятся дополнительные параметры и описание. Можно фильтровать по имени таблицы или схемы.
\deu[+] [pattern]
- Выводит сопоставления пользователей для внешних серверов. Можно фильтровать по имени сопоставления. Используйте
+
, чтобы получить расширенную информацию, включая возможное отображение имени и пароля удаленного пользователя.ОсторожноПри использовании
\deu+
будьте осторожны: могут отображаться чувствительные данные (например, пароли).
\dew[+] [pattern]
- Выводит внешние обертки. Можно фильтровать по имени внешние обертки. При использовании
+
добавляется информация о правах доступа, параметрах и описании.
\df[anptwS+] [pattern [arg_pattern ... ]]
- Выводит функции вместе с типами данных результатов, аргументами типов данных и типами функций, классифицируемыми как «agg» (агрегатная), «normal», (обычная), «procedure» (процедурная), «trigger» (триггерная) или «window» (оконная). Чтобы отобразить только функции определенных типов, добавьте соответствующие буквы
a
,n
,p
,t
, илиw
к команде. Если указано pattern, отображаются только функции, имена которых соответствуют шаблону. Любые дополнительные аргументы являются образцами имен типов, которые сравниваются с именами типов первого, второго и так далее аргументов функции. Функции, совпадающие по шаблону, могут иметь больше аргументов, чем указали. Чтобы предотвратить это, укажите дефис - последнимarg_pattern
. По умолчанию отображаются только объекты, созданные пользователем, для включения системных объектов задайте шаблон или модификаторS
. Если используется форма\df+
, дополнительная информация о каждой функции отображается, включая изменчивость, безопасность параллельного выполнения, владельца, класс безопасности, права доступа, язык, внутреннее имя (только для функций на языке C и внутренних функций) и описание. Исходный код конкретной функции можно увидеть с помощью команды\sf
.
\dF[+] [pattern]
- Выводит конфигурации полнотекстового поиска. Можно фильтровать по имени конфигурации. При использовании
+
дополнительно показываются словари и анализатор для каждого типа токена.
\dFd[+] [pattern]
- Выводит словари полнотекстового поиска. Можно фильтровать по имени словаря. Форма
+
добавляет расширенную информацию о каждом выбранном словаре, включая базовый шаблон полнотекстового поиска и значения параметров.
\dFp[+] [pattern]
- Выводит список анализаторов полнотекстового поиска. Можно фильтровать по имени анализатора. При использовании
+
для каждого анализатора выводится полное описание, включая базовые функции и список распознаваемых типов токенов.
\dFt[+] [pattern]
- Выводит список шаблонов полнотекстового поиска. Можно фильтровать по имени шаблона. При использовании
+
отображается дополнительная информация, включая названия базовых функций.
\dg[S+] [pattern]
- Выводит список ролей базы данных. (Поскольку понятия «пользователей» и «групп» были объединены в понятие «ролей», эта команда теперь эквивалентна
\du
). По умолчанию отображаются только созданные пользователем объекты. Чтобы включить системные объекты, укажите шаблон или аргументS
. При использовании+
о каждой роли будет представлена дополнительная информация, в настоящее время это добавляет комментарий к каждой роли.
\dl[+]
- Выводит список больших объектов (эквивалентно
\lo_list
). Форма+
выводит права доступа.
\dL[S+] [pattern]
- Выводит список процедурных языков. Можно фильтровать по имени языка. По умолчанию отображаются только созданные пользователем объекты. Чтобы включить системные объекты, укажите шаблон или аргумент
S
. При использовании+
каждый язык выводится с его обработчиком вызовов, валидатором, привилегиями доступа и указанием того, является ли он системным объектом.
\dn[S+] [pattern]
- Выводит схемы (пространства имен). Можно фильтровать по имени схемы. По умолчанию отображаются только созданные пользователем объекты. Чтобы включить системные объекты, укажите шаблон или аргумент
S
. При использовании+
каждый объект выводится со связанными с ним разрешениями и описанием, если таковое имеется.
\do[S+] [pattern [arg_pattern [arg_pattern] ] ]
- Выводит список операторов с их аргументами и типами возвращаемых значений. Если указан только один
arg_pattern
, выводятся унарные операторы с соответствующим правым аргументом. Если указаны обаarg_pattern
, выводятся бинарные операторы с совпадающими типами аргументов. Чтобы указать отсутствующий аргумент унарного оператора, используйте-
. По умолчанию показываются только пользовательские объекты. ДобавьтеS
или шаблон, чтобы включить системные. При использовании+
отображается имя функции, реализующей оператор.
\dO[S+] [pattern]
- Выводит сопоставления. Можно фильтровать по имени сопоставления. По умолчанию показываются только пользовательские объекты. Добавьте
S
или шаблон, чтобы включить системные. При использовании+
каждое сопоставление выводится с соответствующим описанием, если оно есть.Обратите внимание, что отображаются только сопоставления, которые могут быть использованы с кодировкой текущей базы данных, поэтому результаты могут различаться в разных базах данных одной установки.
\dp[S][pattern]
- Выводит список таблиц, представлений и последовательностей с их связанными привилегиями доступа. Можно фильтровать по именам таблицы, представления и последовательности. По умолчанию показываются только объекты, созданные пользователями. Для включения системных объектов нужно задать шаблон или добавить модификатор
S
.Команды GRANT и REVOKE используются для установки привилегий доступа. Значение отображения привилегий объясняется в разделе «Привилегии».
\dP[itn+] [pattern]
- Выводит разделенные отношения: таблицы и индексы. Аргументы
t
иi
фильтруют вывод по типу объекта.n
добавляет информацию о родительских отношениях.+
включает размеры разделов и описание. При использованииn+
показываются два размера: для прямых разделов и для всех вложенных.
\drds [role-pattern [database-pattern] ]
- Выводит настройки конфигурации, заданные для ролей и/или баз данных. Можно фильтровать по именам ролей и баз данных. Без шаблонов или если указано
*
, выводятся все настройки, включая глобальные.Команды ALTER ROLE и ALTER DATABASE используются для определения настроек конфигурации для каждой роли и базы данных.
\drg[S] [ pattern ]
- Перечисляет информацию обо всех предоставленных членствах ролей, включая назначенные опции (
ADMIN
,INHERIT
и/илиSET
) и праводателя.По умолчанию отображаются только гранты ролям, созданным пользователем, используйте модификатор
S
для включения системных ролей. Если указаноpattern
, перечисляются только гранты тем ролям, имена которых соответствуют шаблону.
\dRp[+] [pattern]
- Выводит публикации репликации. Можно фильтровать по имени публикации. При использовании
+
также отображаются таблицы и схемы, связанные с каждой публикацией.
\dRs[+] [pattern]
- Выводит список подписок репликации. Можно фильтровать по имени подписки. При использовании
+
отображаются дополнительные свойства подписок.
\dT[S+] [pattern]
- Выводит список типов данных. Можно фильтровать по имени типа. При использовании
+
каждый тип выводится с его внутренним именем и размером, допустимыми значениями, если это типenum
, а также связанными разрешениями. По умолчанию показываются только пользовательские объекты. ДобавьтеS
или шаблон, чтобы включить системные.
\du[S+] [pattern]
- Выводит список ролей базы данных. (Поскольку понятия «пользователей» и «групп» были объединены в понятие «ролей», эта команда теперь эквивалентна
\dg
). По умолчанию показываются только пользовательские роли. ДобавьтеS
или шаблон, чтобы включить системные. Можно фильтровать по имени роли. Если используется форма\du+
, о каждой роли будет представлена дополнительная информация, в настоящее время это добавляет комментарий к каждой роли.
\dx[+] [pattern]
- Выводит установленные расширения. Можно фильтровать по имени расширения. Если используется форма
\dx+
, перечисляются все объекты, принадлежащие каждому соответствующему расширению.
\dX [pattern]
- Выводит расширенную статистику. Можно фильтровать по имени расширенной статистики.
Состояние каждого вида расширенной статистики показано в столбце с именем типа статистики (например,
Ndistinct
).defined
означает, что он был запрошен при создании статистики, аNULL
означает, что не было запрошено. Используйте представлениеpg_stats_ext
для информации о запуске команды ANALYZE и доступе планировщика к статистике.
\dy[+] [pattern]
- Выводит триггеры событий. Можно фильтровать по имени триггера событий. При использовании
+
каждый объект выводится вместе с его описанием.
\e
\edit [filename] [line_number]
- Открывает редактор:
- если указан
filename
— редактируется он; - если
filename
не указан — редактируется текущий буфер запроса; - если буфер пуст — копируется во временный файл последний выполненный запрос и редактируется;
- после сохранения — содержимое анализируется как одна строка;
line_number
указывает, на какой строке открыть редактор;- число без имени файла трактуется как номер строки.
Если редактируете файл или предыдущий запрос и выходите из редактора без внесения изменений, буфер запроса будет очищен. В противном случае обновленное содержимое буфера обрабатывается по обычным правилам
psql
: весь буфер рассматривается как единая строка. Все завершенные запросы (то есть те, которые оканчиваются точкой с запятой) немедленно выполняются и удаляются из буфера. Остальная часть буфера выводится обратно на экран. Чтобы отправить буфер на выполнение, введите точку с запятой или\g
. Чтобы отменить и очистить буфер — используйте\r
.Обработка буфера как одной строки особенно важна для метакоманд: все, что идет после метакоманды, будет интерпретировано как ее аргументы, даже если это занимает несколько строк. Поэтому использовать метакоманды в многострочных сценариях через редактор не получится — для этого применяйте команду
\i
.Если указан номер строки,
psql
откроет файл или буфер запроса с курсором на этой строке. Учтите, что если передан единственный числовой аргумент, он воспринимается как номер строки, а не как имя файла.СоветКак настроить редактор описано в разделе «Переменные окружения» ниже.
- если указан
\echo text [ ... ]
- Выводит переданные аргументы, обработанные как строки, на стандартный вывод, разделяя их пробелами и добавляя перевод строки. Это полезно, например, для вывода информации в скриптах. Например:
=> \echo `date`
Tue Oct 26 21:40:57 CEST 1999
Если первым аргументом указать -n
без кавычек, то перевод строки в конце подавляется, и сам -n
не выводится.
При использовании \o
для перенаправления вывода команд, лучше применять \qecho
, чтобы избежать путаницы. Ознакомьтесь также с \warn
.
\ef [function_description [line_number]]
- Открывает определение указанной функции или процедуры в редакторе в виде команды
CREATE OR REPLACE FUNCTION
илиCREATE OR REPLACE PROCEDURE
. Если редактор закрыт без сохранения — изменения игнорируются. При сохранении — команда выполняется, если завершена точкой с запятой, иначе возвращается для последующей отправки (;
,\g
) или отмены (\r
).Функцию можно указать по имени или по имени с типами аргументов (например,
foo(integer, text)
). Если ничего не указано — открывается шаблонCREATE FUNCTION
. Указание строки позволяет установить курсор на определенную строку тела функции.Вся оставшаяся часть строки всегда принимается за аргументы
\ef
, и ни интерполяция переменных, ни расширение обратных кавычек не выполняются в аргументах.СоветКак настроить редактор описано в разделе «Переменные окружения» ниже.
\encoding [encoding]
- Задает кодировку клиента. При отсутствии аргументов отображается текущая кодировка.
\errverbose
- Повторяет последнее сообщение об ошибке сервера с полной детализацией, как при включенных параметрах
VERBOSITY = verbose
иSHOW_CONTEXT = always
.
\ev [view_name [line_number]]
- Открывает определение представления в редакторе как команду
CREATE OR REPLACE VIEW
. Поведение аналогично\ef
.Если представление не указано — открывается шаблон
CREATE VIEW
. Редактирование выполняется так же, как для\edit
. Если редактор закрыт без сохранения — изменения игнорируются. При сохранении — команда выполняется, если завершена точкой с запятой, иначе возвращается для последующей отправки (;
,\g
) или отмены (\r
). Указание строки позволяет сразу перейти к нужной строке.Вся оставшаяся часть строки всегда принимается за аргументы
\ev
, и ни интерполяция переменных, ни расширение обратных кавычек не выполняются в аргументах.
\f [string]
- Устанавливает символ-разделитель между полями в нерегулярном (например, текстовом) выводе запроса. По умолчанию — вертикальная черта (
|
). Эквивалентно команде\pset fieldsep
.
\g [(option=value [...])] [filename]
\g [(ption=value [...])] [ | command]
- Отправляет текущий буфер запроса на выполнение. Параметры внутри скобок аналогичны
\pset option value
, но действуют только на текущий запрос. Пробелы вокруг=
не допускаются, между парамиoption=value
— обязательны. Если=value
отсутствует, именованнаяoption
изменяется таким же образом, как и для\pset option
без явногоvalue
.Вывод можно перенаправить в файл
filename
или передать команде оболочки (| command
). Это происходит только при успешном выполнении запроса с результатом ноль или более кортежей, а не если запрос завершается ошибкой или является командой SQL, которая не возвращает данные.Если буфер пуст — повторно выполняется последний запрос. За исключением этого поведения,
\g
без аргументов практически эквивалентен точке с запятой. С аргументами\g
предоставляет альтернативу «одноразовую» команду\o
, а также позволяет одноразово корректировать параметры вывода, обычно устанавливаемые с помощью\pset
.Если указан
|
, оставшаяся часть строки интерпретируется буквально как командаcommand
оболочки, и ни интерполяция переменных, ни расширение обратных кавычек в ней не выполняются. Остальная часть строки просто передается буквально оболочке.
\gdesc
- Выводит описание результата текущего запроса — имена и типы столбцов — без его выполнения. При пустом буфере используется последний отправленный запрос. Синтаксические ошибки отображаются.
\getenv psql_var env_var
- Присваивает переменной
psql_var
значение переменной окруженияenv_var
. Если переменная окружения отсутствует, переменнаяpsql_var
остается без изменений. Пример:
=> \getenv home HOME
=> \echo :home
/home/postgres
\gexec
- Выполняет текущий запрос, а затем интерпретирует каждый столбец каждой строки результата как отдельную SQL-команду и выполняет ее.
Создание индексов для всех столбцов таблицы
my_table
:
=> SELECT format('create index on my_table(%I)', attname)
-> FROM pg_attribute
-> WHERE attrelid = 'my_table'::regclass AND attnum > 0
-> ORDER BY attnum
-> \gexec
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
Команды выполняются построчно и слева направо внутри каждой строки, если имеется более одного столбца. Поля NULL
игнорируются. Метакоманды psql
и переменные в этом режиме не поддерживаются. Ошибки в отдельных командах не останавливают выполнение остальных (если не включен параметр ON_ERROR_STOP
).
Выполнение каждого запроса подлежит обработке ECHO
. Рекомендуется установить ECHO = all
или queries
для наглядности. Регистрация запросов, пошаговый режим, тайминг и другие функции выполнения запросов также применяются к каждому сгенерированному запросу.
Если буфер запроса пуст — повторно выполняется последний запрос.
\gset [prefix]
- Выполняет текущий запрос и сохраняет результат (одну строку) в переменные
psql
. Подробнее описано в разделе «Переменные» ниже. Каждый столбец строки сохраняется в переменную с именем, совпадающим с именем столбца. Например:
=> SELECT 'hello' AS var1, 10 AS var2
-> \gset
=> \echo :var1 :var2
-- вывод hello 10
Если указан prefix
, он добавляется к имени каждой переменной:
=> SELECT 'hello' AS var1, 10 AS var2
-> \gset result_
=> \echo :result_var1 :result_var2
-- вывод hello 10
Если значение столбца — NULL
, переменная не устанавливается и, если была, сбрасывается. При отсутствии результата или ошибке выполнения запроса переменные не изменяются. Если буфер запроса пуст, повторно используется последний отправленный запрос.
\gx [(option=value [...])] [filename]
\gx [(option=value [...])] [ |command]
- Работает аналогично
\g
, но вывод выполняется в расширенном режиме независимо от текущих настроек (аналогично указанномуexpanded=on
в списке параметров\pset
, подробнее в описании\x
).
\h
\help [command]
- Отображает синтаксическую справку по указанной SQL-команде. Если команда не указана — выводится список всех команд, по которым доступна справка. Если задан
*
, отображается помощь по всем командам.Вся оставшаяся часть строки всегда принимается за аргументы
\help
, и ни интерполяция переменных, ни расширение обратных кавычек не выполняются в аргументах. Команды из нескольких слов можно указывать без кавычек, например\help alter table
.
\H
\html
- Переключает вывод в формат HTML. Повторный вызов возвращает формат к обычному выровненному тексту.
Используется для совместимости и формирования вывода в виде HTML-таблицы. С управлением форматами вывода можно ознакомиться в описании команды
\pset
.
\i
\include filename
- Загружает и выполняет команды из указанного файла
filename
, как если бы они были введены вручную. Если указан-
вместо имени файлаfilename
, ввод читается со стандартного потока до достижения EOF или команды\q
. Используется для чередования интерактивного ввода с вводом из файлов. Обратите внимание, что поведение Readline будет использоваться только в том случае, если оно активно на внешнем уровне.примечаниеДля отображения строк по мере выполнения можно установить переменную
ECHO
в значениеall
.
\if expression
\elif expression
\else
\endif
- Реализуют вложенные условные блоки. Условный блок начинается с
\if
и заканчивается\endif
. Можно использовать любое количество\elif
и один\else
. Обычные запросы и другие типы команд с обратной косой чертой могут (и обычно появляются) между командами, образующими условный блок.Команды
\if
и\elif
читают свой аргументы и оценивают их как логическое выражение. Если выражение даетtrue
, то обработка продолжается нормально; в противном случае пропускаются строки до тех пор, пока не будет достигнут соответствующий\elif
,\else
или\endif
. Как только тест\if
или\elif
прошел успешно, аргументы последующих команд\elif
в том же блоке не оцениваются, а рассматриваются как ложные. Строки после\else
обрабатываются только в том случае, если ни один из предыдущих соответствующих тестов\if
или\elif
не был успешным.Аргумент
expression
команды\if
или\elif
подлежит интерполяции переменных и расширению обратных кавычек, так же как любой другой аргумент команды с обратной косой чертой. После этого он оценивается так же, как значение переменной опции включения/выключения. Таким образом, допустимым значением является любое однозначное нечувствительное к регистру совпадение для одного из следующих значений:true
,false
, 1, 0,on
,off
,yes
,no
. Например,t
,T
иtR
будут рассматриваться какtrue
.Если выражение не может быть интерпретировано как логическое — выводится предупреждение и оно считается ложным.
Пропускаемые строки анализируются нормально для идентификации запросов и команд с обратной косой чертой, но запросы не отправляются на сервер, а команды с обратной косой чертой, отличные от условных (
\if
,\elif
,\else
,\endif
), игнорируются. Условные команды проверяются только на допустимое вложение. Ссылки на переменные в пропущенных строках не расширяются, и расширение обратных кавычек также не выполняется.Все команды с обратной косой чертой данного условного блока должны находиться в одном исходном файле. Если достигается конец файла основного входного файла или файла с
\include
, прежде чем все локальные блоки\if
были закрыты, тоpsql
выдаст ошибку.Пример:
-- проверка существования двух отдельных записей в базе данных и сохранение
-- результатов в двух разных переменных psql
SELECT
EXISTS(SELECT 1 FROM customer WHERE customer_id = 123) as is_customer,
EXISTS(SELECT 1 FROM employee WHERE employee_id = 456) as is_employee
\gset
\if :is_customer
SELECT * FROM customer WHERE customer_id = 123;
\elif :is_employee
\echo 'is not a customer but is an employee'
SELECT * FROM employee WHERE employee_id = 456;
\else
\if yes
\echo 'not a customer or employee'
\else
\echo 'this will never print'
\endif
\endif
\ir
\include_relative
- Включает другие SQL-скрипты, альтернатива команде
\i
. В интерактивном режиме работает так же, как\i
. Однако при запуске из скрипта\ir
интерпретирует путь к файлу относительно расположения самого скрипта, а не текущего рабочего каталога.
\l[+]
\list[+] [pattern]
- Выводит список всех баз данных на сервере: имя, владелец, кодировка и доступные привилегии. Можно фильтровать по имени базы данных. При использовании
+
дополнительно отображаются размер, табличное пространство по умолчанию и описание (отображается только для баз, к которым пользователь может подключиться).
\lo_export loid filename
- Сохраняет большой объект с заданным OID (
loid
) в файлfilename
на стороне клиента. Немного отличается от серверной функцииlo_export
, которая работает от имени пользователя сервера и с файловой системой сервера.::: tipA Совет Используйте
\lo_list
, чтобы определить OID нужного большого объекта. :::
\lo_import filename [comment]
- Загружает файл в виде большого объекта в базу данных. Можно также указать комментарий, который будет привязан к объекту. Пример:
foo=> \lo_import '/home/peter/pictures/photo.xcf' 'a picture of me'
lo_import 152801
Результатом является OID нового объекта (например, 152801), который можно использовать для доступа к недавно созданному большому объекту в будущем. Рекомендуется добавлять комментарии для удобства идентификации. Информацию об OID и комментариях можно получить через \lo_list
.
Обратите внимание: команда работает от имени локального пользователя и с его файловой системой (в отличие от серверной версии lo_import
).
\lo_list[+]
- Выводит список всех больших объектов, хранящихся в текущей базе данных вместе с комментариями. При использовании
+
дополнительно отображаются права доступа к каждому объекту.
\lo_unlink loid
- Удаляет из базы данных большой объект с указанным OID
loid
.СоветДля поиска нужного OID используйте
\lo_list
.
\o
\out [filename]
\o
\out [ |command]
- Перенаправляет вывод последующих запросов в файл
filename
или в команду оболочкиcommand
(если путь начинается с|
). Если аргумент не указан, вывод снова направляется в стандартный поток.Если аргумент начинается с
|
, то вся оставшаяся часть строки принимается за командуcommand
для выполнения, и ни интерполяция переменных, ни расширение обратных кавычек не выполняются в ней. Остальная часть строки просто передается буквально оболочке.Результат запроса включает все таблицы, ответы команд и уведомления, полученные от сервера баз данных, а также вывод различных команд с обратной косой чертой, которые запрашивают базу данных (например,
\d
); но не сообщения об ошибках.::: tip Совет
Для чередования вывода и текста используйте
\qecho
. :::
\p
\print
- Выводит текущий буфер запроса на экран. Если буфер пуст, отображается последний выполненный запрос.
\password [username]
- Позволяет сменить пароль пользователя (по умолчанию — текущего). Новый пароль запрашивается, шифруется и передается на сервер с помощью команды
ALTER ROLE
. Это защищает его от попадания в лог или историю команд.
\prompt [text] name
- Запрашивает у пользователя ввод и сохраняет его в переменную
name
. Можно указать текст подсказкиtext
(для многословных подсказок заключите текст в одинарные кавычки.)По умолчанию,
\prompt
использует терминал для ввода и вывода. Однако, если используется переключатель командной строки-f
,\prompt
использует стандартный ввод и стандартный вывод.
\pset [option [value]]
- настраивает параметры, влияющие на форматирование вывода результатов запросов в
psql
. Указывается параметрoption
, который необходимо изменить, и, при необходимости, его значениеvalue
. Еслиvalue
не указано, поведение зависит от параметра: оно может переключать его состояние, сбрасывать в значение по умолчанию или просто отображать текущую настройку.Вызов
\pset
без аргументов показывает текущее состояние всех параметров форматирования вывода.Доступные параметры:
border
: Устанавливает толщину рамок таблицы, принимает числовое значение. Как правило, чем выше значение, тем больше рамок и линий отображается в таблице. В формате HTML оно напрямую устанавливается какborder=...
. В остальных форматах имеют смысл только значения 0 (без рамок), 1 (внутренние линии) и 2 (внешняя рамка). Значения выше 2 трактуются как 2. В форматахlatex
иlatex-longtable
также допустимо значение 3, при котором добавляются горизонтальные линии между строками.columns
: Устанавливает ширину вывода в форматеwrapped
. Также влияет на определение того, стоит ли использовать постраничную разбивку или вертикальный режим отображения (expanded auto
). Значение 0 (по умолчанию) означает, что ширина будет определяться из переменной окруженияCOLUMNS
или автоматически по ширине экрана. еслиcolumns
равен нулю, то форматwrapped
влияет только на вывод на экран. При ненулевом значении ширина применяется ко всем видам вывода, включая файлы и каналы.csv_fieldsep
: Устанавливает символ-разделитель для формата CSV. Если указанный символ встречается в значении поля, оно заключается в кавычки в соответствии со стандартом CSV. По умолчанию используется запятая.expanded
x
: Устанавливает вертикальный формат вывода. Значение должно бытьon
,off
илиauto
. Без значения переключает режим. При значенииon
результат отображается в двух столбцах, с именем столбца слева и данными справа. Этот режим полезен, если данные не помещаются на экране в горизонтальном режиме. В режимеauto
расширенный режим используется всякий раз, когда вывод запроса содержит более одного столбца и шире экрана, иначе используется обычный режим. Автоматический режим эффективен только в форматах выравнивания и обертки.fieldsep
: Определяет разделитель полей в неформатированном (unaligned
) выводе. Например,\pset fieldsep '\t'
установит табуляцию в качестве разделителя. По умолчанию используется вертикальная черта (|
).fieldsep_zero
: Устанавливает нулевой байт в качестве разделителя полей вunaligned
формате.footer
: Определяет отображение нижнего колонтитула (n rows
). Принимает значенияon
— включен,off
— выключен. Без значения — переключает текущее состояние.format
: Определяет формат вывода. Допускаются уникальные сокращения.
Возможные значения:
aligned
— читаемый, отформатированный текст (по умолчанию).unaligned
— записывает все значения строки в одну строку, разделяя их текущим символом-разделителем полей. Этот режим удобен для вывода, предназначенного для последующей обработки другими программами, особенно при использовании табуляции или запятых в качестве разделителей. Однако следует учитывать, что символ-разделитель не экранируется, если он встречается внутри значения. В таких случаях предпочтительнее использовать форматcsv
.csv
— выводит значения столбцов, разделенные запятыми, с применением правил экранирования, определенных в RFC 4180. Этот вывод совместим с CSV-форматом команды COPY на стороне сервера. Если включен режимtuples_only
,psql
также добавляет строку с именами столбцов в начале. Заголовки таблиц и нижние колонтитулы в этом формате не выводятся. Каждая строка завершается символом конца строки, зависящим от операционной системы: это может быть\n
(на Unix-подобных системах) или\r\n
(на Windows). При необходимости можно изменить символ-разделитель с помощью\pset csv_fieldsep
.wrapped
— автоматически переносит длинные значения столбцов на новую строку, чтобы они помещались в заданную ширину колонки. Целевая ширина определяется аналогично параметруcolumns
. При этом имена столбцов не переносятся — если они слишком длинные, вывод работает так же, как и в форматеaligned
.
Форматы asciidoc
, html
, latex
, latex-longtable
и troff-ms
выводят таблицы, которые предназначены для включения в документы с помощью соответствующего языка разметки. Не являются полноценными документами. Это может быть не критично для HTML, но для LaTeX обязателен документ-контейнер. Формат latex
использует среду LaTeX tabular
, а формат latex-longtable
требует наличия пакетов longtable
и booktabs
.
linestyle
- Определяет стиль отображения границ таблицы. Можно использовать уникальные сокращения (например,
a
вместоascii
). Значение по умолчанию —ascii
. Эта настройка применяется только к форматам выводаaligned
иwrapped
.
Допустимые значения:
ascii
— использует стандартные ASCII-символы. Переносы строк в ячейках отображаются символом+
в правой границе таблицы. Если значение не содержит символа новой строки, но все же переносится на следующую строку, отображается точка. в правой границе первой строки и снова в левой границе следующей.old-ascii
— использует ASCII-символы, но в старом стиле (до версии 8.4 PostgreSQL). Переносы строк показываются вертикальной чертой|
вместо обычного левого разделителя.unicode
— использует Unicode-символы для рисования рамок. Перенос строки внутри ячейки отмечается символом возврата каретки в правой границе. Если переносится без символа новой строки, в правой границе первой строки отображается многоточие, а в левой границе следующей — снова соответствующий символ.
Если в настройке терминала указана ширина (через \pset columns
), стиль linestyle
также влияет на отображаемые символы рамок. ASCII подойдет везде, но Unicode выглядит более эстетично, если поддерживается терминалом.
null
- Определяет, какая строка будет выведена вместо значения
NULL
. По умолчанию — ничего (то есть пустая строка), что может быть неотличимо от настоящей пустой строки. Например, для явного указания можно задать\pset null '(NULL)'
.numericlocale
: Включает или отключает отображение чисел с учетом локали (например, разделителей тысяч). Допустимые значения:on
,off
. Без значения — переключает текущий режим.pager
: Управляет использованием постраничного вывода.\pset pager
безvalue
включает и выключает использование постраничного вывода.
Допустимые значения:
off
— отключает постраничный вывод;on
— включает его, если вывод идет в терминал и превышает размер экрана;always
— включает постраничный вывод независимо от длины вывода.
Если заданы переменные окружения PSQL_PAGER
или PAGER
, используется указанная в них программа. Иначе — стандартная для платформы, например more
.
Для команды \watch
используется переменная окружения PSQL_WATCH_PAGER
для поиска программы постраничной разбивки в системах Unix. Это настроено отдельно, потому что это может сбить с толку традиционные программы постраничной разбивки, но его можно использовать для отправки вывода инструментам, которые понимают формат вывода psql (таким как pspg --stream
).
pager_min_lines
- Определяет минимальное количество строк для активации
pager
. Если задано значение больше высоты экрана, постраничный вывод не активируется, пока результат не превысит указанное число строк. По умолчанию — 0.recordsep
: Задает символ или строку-разделитель между записями (строками) в форматеunaligned
. По умолчанию — символ новой строки (\n
).recordsep_zero
: Устанавливает разделитель записей в форматеunaligned
как нулевой байт.tableattr
(илиT
) : Задает атрибуты таблицы HTML или ширина столбцов в LaTeX.
В формате HTML задает атрибуты HTML-тега <table>
, например: cellpadding
, bgcolor
. Атрибут border
настраивается через \pset border
.
В формате latex-longtable
управляет пропорциональной шириной столбцов, например: '0.2 0.3 0.5'
. Для неуказанных столбцов используется последнее значение из списка.
title
C
- Задает заголовок для таблиц в выводе, например, описание запроса. Если значение не указано, заголовок сбрасывается. Можно использовать для того, чтобы дать результатам описательные метки.
tuples_only
t
: Включает (on
) или отключает (off
) режим «только кортежи» (без заголовков и колонтитулов). Без значения команда переключается между обычным и выводом только кортежей. Обычный вывод включает дополнительную информацию, такую как заголовки столбцов, названия и различные колонтитулы. В режиме только кортежей отображаются только фактические данные таблицы.unicode_border_linestyle
: Устанавливает стиль внешней границы при использованииunicode
. Допустимые значения —single
илиdouble
.unicode_column_linestyle
: Устанавливает стиль линий, разделяющих столбцы при использованииunicode
. Допустимые значения —single
илиdouble
.unicode_header_linestyle
: Устанавливает стиль границ заголовков таблицы при использованииunicode
. Допустимые значения —single
илиdouble
.xheader_width
: Устанавливает максимальную ширину заголовка расширенного вывода равной одной из следующих величин: full (значение по умолчанию), column, page или integer value.full
– расширенный заголовок не усекается и будет такой же ширины, как самая широкая строка вывода.column
– усечь строку заголовка до ширины первого столбца.page
– усечь строку заголовка до ширины терминала.integer value
– указать точную максимальную ширину строки заголовка.
Примеры того, как выглядят эти разные форматы, можно увидеть в разделе «Примеры» ниже.
СоветДля удобства можно использовать сокращенные команды
\pset
:\a
,\C
,\f
,\H
,\t
,\T
,\x
— соответствуют часто используемым параметрам.
\q
\quit
- Завершает сеанс
psql
. При использовании в скрипте — завершает только его выполнение.
\qecho text [ ... ]
- Идентична команде
\echo
, но вывод направляется в текущий канал вывода запроса, установленный командой\o
.
\r
\reset
- Очищает текущий буфер запросов.
\s [filename]
- Выводит историю команд
psql
. Если указанfilename
, записывает историю в файл. Иначе выводит ее на стандартный вывод, используя постраничный вывод при необходимости. Доступно только при наличии поддержки Readline.
\set [name [value [...]]]
- Создает или изменяет переменную
psql
name
. Если указано несколькоvalue
, они объединяются. Без значений переменная становится пустой. Чтобы сбросить переменную, используйте команду\unset
.
Вызов \set
без аргументов отображает все текущие переменные и их значения. Имена переменных чувствительны к регистру и могут содержать буквы, цифры и подчеркивания. Подробнее об этом в разделе «Переменные» ниже.
Некоторые переменные являются особыми, поскольку они управляют поведением psql
или автоматически устанавливаются для отражения состояния соединения. Эти переменные описаны в «Переменные» ниже.
Эта команда не связана с SQL-командой SET.
\setenv name [value]
- Устанавливает или удаляет переменную окружения
name
наvalue
. Еслиvalue
не указан, переменная удаляется. Пример:
testdb=> \setenv PAGER less
testdb=> \setenv LESS -imx4F
\sf[+] function_description
- Выводит определение указанной функции или процедуры в виде команды
CREATE OR REPLACE FUNCTION
илиCREATE OR REPLACE PROCEDURE
. Определение выводится на текущий канал вывода запроса, установленный командой\o
.Можно указать имя и типы аргументов, например
foo(integer, text)
. Типы аргументов должны быть указаны, если существует более одной функции с тем же именем. При использовании+
строки будут пронумерованы.Вся оставшаяся часть строки всегда принимается за аргументы
\sf
, и ни интерполяция переменных, ни расширение обратных кавычек не выполняются в аргументах.
\sv[+] view_name
- Показывает определение представления как
CREATE OR REPLACE VIEW
. Определение выводится на текущий канал вывода запроса, установленный командой\o
. При использовании+
строки нумеруются начиная с 1.Вся оставшаяся часть строки всегда принимается за аргументы
\sv
, и ни интерполяция переменных, ни расширение обратных кавычек не выполняются в аргументах.
\t
- Включает или отключает вывод заголовков и итогов (количества строк). Эквивалентно
\pset tuples_only
.
\T table_options
- Устанавливает атрибуты HTML-тега
<table>
при выводе в HTML-формате. Аналог\pset tableattr
.
\timing [on | off]
- Включает или выключает отображение времени выполнения SQL-команд. Без аргумента — переключает текущее состояние. Время показывается в миллисекундах или в формате
дни:часы:минуты:секунды
.
\unset name
- Удаляет переменную
psql
. Некоторые переменные нельзя полностью удалить, и команда приводит к их сбросу на значения по умолчанию. Подробнее об жтом описано в разделе «Переменные» ниже.
\w
\write filename
\w
\write | command
- Сохраняет буфер текущего запроса в файл
filename
, или — если указано|command
— передает его команде оболочки. Если буфер пуст, используется последний выполненный запрос.Если аргумент начинается с
|
, то вся оставшаяся часть строки принимается за командуcommand
для выполнения, и ни интерполяция переменных, ни расширение обратных кавычек не выполняются в ней. Остальная часть строки просто передается буквально оболочке.
\warn text [ ... ]
- Идентична команде
\echo
, но вывод идет вstderr
(канал ошибок), а неstdout
.
\watch [ i[nterval]=seconds ] [ c[ount]=times ] [ m[in_rows]=rows ] [ seconds ]
- Неоднократно выполняет текущий буфер запросов (так же, как это делает
\g
) до прерывания, неудачи выполнения запроса, достижения указанного предела количества исполнений или пока запрос больше не возвращает минимальное число строк. Ожидает указанное количество секунд (по умолчанию2
) между выполнениями. Для совместимости с предыдущими версиями seconds можно указать с префиксом interval= или без него. Каждый результат запроса отображается с заголовком, который включает строку\pset title
(если она имеется), время начала запроса и интервал задержки.Если текущий буфер запросов пуст, повторно выполняется последний отправленный запрос.
\x [ on | off | auto]
- Устанавливает или переключает режим расширенного отображения таблиц. То же, что
\pset expanded
.
\z[S] [pattern]
- Показывает таблицы, представления и последовательности вместе с правами доступа. Можно фильтровать по именам таблицы, представления и последовательности. По умолчанию показываются только объекты, созданные пользователями. Для включения системных объектов нужно задать шаблон или добавить модификатор
S
.Аналогична команде
\dp
.
\! [command]
- Без аргументов запускает подчиненную оболочку, когда эта оболочка завершается,
psql
продолжает работу. С аргументом — выполняет указанную команду оболочки. Аргументы не интерполируются и передаются как есть.Без аргумента, выходит в под-шелл; psql возобновляется при выходе из под-шелла. С аргументом выполняет команду оболочки
command
.Вся оставшаяся часть строки всегда принимается за аргументы
\!
, и ни интерполяция переменных, ни расширение обратных кавычек не выполняются в аргументах.
\? [topic]
- Выводит справку по
psql
. Возможные значенияtopic
:- commands — описание метакоманд;
- options — параметры командной строки;
- variables — переменные конфигурации.
\;
- Комбинация обратной косой черты и точки с запятой (
\;
) не является полноценной метакомандой, как предыдущие команды. Ее функция — вставить точку с запятой в буфер запроса без немедленной отправки запроса серверу.В обычной ситуации
psql
отправляет SQL-команду на сервер сразу после первой встреченной точки с запятой, даже если в строке есть другие команды. Например:
select 1; select 2; select 3;
Это приведет к последовательной отправке трех отдельных SQL-команд и отображению их результатов поочередно.
В отличие от этого, если использовать \;
, например:
select 1\; select 2\; select 3;
то psql
рассматривает все как один составной запрос и отправляет его на сервер целиком. Такой запрос выполняется как одно выражение, возможно, в пределах одной транзакции, если не указано иное через BEGIN
/COMMIT
. Подробнее об этом описано в разделе «Несколько операторов в простом запросе»
Шаблоны
Многие метакоманды принимают шаблон (pattern
) для указания имен объектов.
Простой шаблон — это точное имя объекта, например mytable
. По умолчанию все символы в шаблоне приводятся к нижнему регистру, как в SQL. Чтобы избежать этого, заключите имя в двойные кавычки: "MyTable"
.
Для включения символа двойной кавычки в шаблон используются два символа двойных кавычек подряд внутри шаблона в двойных кавычках, что соответствует правилам для идентификаторов SQL в кавычках. Например \dt "FOO""BAR"
будет выводить таблицу с именем FOO"BAR
(но не foo"bar
). Допускается частичное заключение шаблона в кавычки: например, my"Table"
.
Если шаблон опущен, команда отображает все видимые объекты в текущем пути поиска схем. Это то же самое, что задать шаблон *
. Чтобы отобразить все объекты в базе, независимо от видимости — используйте шаблон *.*
.
Символ *
в шаблоне означает «любое количество любых символов», а ?
— «один любой символ», как в Unix-оболочках. Например, foo*
отобразит объекты, начинающиеся на foo
. Однако в двойных кавычках символы *
и ?
теряют специальное значение.
Шаблон отношения, содержащий точку (.
) интерпретируется как шаблон имени схемы, за которым следует шаблон имени объекта: schema.object
. Например, foo*.*bar*
покажет объекты, содержащие bar
в имени и находящиеся в схемах, начинающихся на foo
.
Шаблон схемы, содержащий точку (.
) интерпретируется как имя базы данных, за которым следует шаблон имени схемы: database.schema.object
. Например, \dn mydb.*foo*
отображает все схемы, имена которых содержат foo
. Часть имени базы данных не будет обрабатываться как шаблон и должна соответствовать имени текущей подключенной базы данных, иначе возникнет ошибка.
Точка внутри двойных кавычек ("."
) воспринимается буквально, а не как разделитель. Когда точки нет — шаблон соответствует только объектам, видимым в текущем пути поиска схемы.
Шаблон отношения, который содержит две точки интерпретируется как имя базы данных, за которым следует шаблон имени схемы, а затем шаблон имени объекта. Часть имени базы данных не будет обрабатываться как шаблон и должна соответствовать имени текущей подключенной базы данных, иначе возникнет ошибка.
Можно применять синтаксис, похожий на регулярные выражения, в шаблонах метакоманд. Например, [0-9]
— соответствует любой цифре.
Однако шаблоны psql
интерпретируют некоторые символы иначе, чем обычные POSIX-совместимые регулярные выражения:
.
используется как разделитель между частями имени (schema.object
), а не как любой символ.-;*
превращается в.*
;?
превращается в.
;$
соответствует буквально символу$
, а не концу строки.
Если нужно использовать эти символы как в стандартных регулярных выражениях, их можно имитировать вручную:
.
→?
R*
→(R+|)
R?
→(R|)
Кроме того, $
не требуется использовать как якорь конца строки — psql
автоматически считает, что шаблон должен полностью соответствовать имени.
Чтобы избежать жесткого сопоставления с началом и концом, оберните шаблон в *
, например, *log*
.
Если шаблон заключен в двойные кавычки, все специальные символы теряют свои свойства и интерпретируются буквально.
В шаблонах для аргументов (\do
) спецсимволы всегда воспринимаются буквально, даже вне кавычек.
Расширенные функции
Переменные
psql
предоставляет механизм подстановки переменных, аналогичный переменным в командных оболочках Unix. Переменные представляют собой пары имя/значение, где значением может быть произвольная строка любой длины. Имя переменной может включать буквы (включая нелатинские), цифры и символы подчеркивания.
Для задания переменной используется метакоманда \set
, например:
testdb=> \set foo bar
устанавливает переменную foo
со значением bar
.
Для обращения к значению переменной используется двоеточие перед ее именем, например:
testdb=> \echo :foo
-- вывод: bar
Подстановка значений переменных поддерживается как в командах SQL, так и в метакомандах psql
. Подробнее описано в разделе «Интерполяция SQL».
Вызов команды \set
без второго аргумента устанавливает значение переменной как пустую строку. Для удаления переменной используется команда \unset
. Это приводит к полному удалению переменной из текущего окружения psql
. Вызов \set
без аргументов выводит список всех текущих переменных и их значений.
Аргументы команды \set
подлежат той же подстановке, что и другие команды. Это позволяет создавать цепочки зависимых значений, например: \set :foo 'something'
— аналог переменных переменных в языках вроде Perl или PHP. Хотя такие конструкции допустимы, они редко оказываются практически полезными. Вместе с тем, следующая запись: \set bar :foo
является абсолютно допустимым способом копирования переменной.
Некоторые переменные в psql
обрабатываются особым образом и управляют поведением клиента. Эти переменные либо представляют изменяемые параметры настройки, либо внутреннее состояние psql
.
По соглашению, имена таких переменных состоят исключительно из заглавных латинских букв (возможно с цифрами и символами подчеркивания). Чтобы избежать конфликтов, рекомендуется не использовать подобные имена для пользовательских переменных.
Если значение управляющей переменной недопустимо, psql
игнорирует попытку установки. Команда \unset
в этом случае интерпретируется как возврат к значению по умолчанию. Команда \set
без второго аргумента устанавливает значение on
для переменных, поддерживающих этот формат, и отклоняется для всех остальных.
Переменные, принимающие логические значения, также распознают распространенные синонимы: on
, off
, true
, false
и другие.
Ниже перечислены переменные, значения которых psql обрабатывает особым образом:
AUTOCOMMIT
- Определяет поведение автоматического подтверждения транзакций. При значении
on
(по умолчанию) каждая SQL-команда фиксируется автоматически после успешного выполнения. Для ручного управления транзакциями необходимо использоватьBEGIN
илиSTART TRANSACTION
. При значенииoff
фиксирование выполняется только при явном вызовеCOMMIT
илиEND
. В этом режимеpsql
автоматически добавляетBEGIN
перед первой командой в блоке транзакций, если команда допускает выполнение внутри транзакции.::: note Примечание
В режиме
off
завершение неудавшейся транзакции требует явного вызоваABORT
илиROLLBACK
. При выходе из сеанса без подтверждения транзакции все изменения будут потеряны. :::::: note Примечание
Включенный режим
autocommit=on
является традиционным для PostgreSQL, а выключенный режим ближе к спецификации SQL. При необходимости предпочтительный режим можно указать вpsqlrc
или~/.psqlrc
. :::
COMP_KEYWORD_CASE
- Управляет регистром символов для автодополнения SQL-ключевых слов. Поддерживаемые значения:
lower
— слова приводятся к нижнему регистру;upper
— к верхнему регистру;preserve-lower
(по умолчанию) — регистр сохраняется, если введена часть слова, иначе используется нижний;preserve-upper
— аналогично, но используется верхний регистр.
DBNAME
- Содержит имя текущей базы данных. Значение автоматически устанавливается при подключении, но может быть изменено или сброшено вручную.
ECHO
- Определяет, какие строки ввода отображаются на стандартный вывод:
all
— все непустые строки (относится к строкам, читаемым интерактивно);queries
— только SQL-запросы по мере их отправки на сервер;errors
— только неудачные запросы;none
(по умолчанию) — ничего не отображается.
Опции можно задать и через параметры командной строки (-a
, -e
, -b
соответственно).
ECHO_HIDDEN
- Включает отображение SQL-запросов, скрытых за командами обратной косой черты. При значении
on
запрос отображается перед выполнением,noexec
— отображается, но не выполняется,off
(по умолчанию) — отключено. Эквивалентна параметру-E
.
ENCODING
- Содержит текущую кодировку клиента.набора символов клиента. Она устанавливается каждый раз при подключении к базе данных (включая запуск программы) и при изменении кодировки с помощью
\encoding
, но ее можно изменить или сбросить.
ERROR
- Содержит
true
, если последний SQL-запрос завершился с ошибкой, иначе —false
.
FETCH_COUNT
- Задает количество строк, извлекаемых и отображаемых за одну итерацию при выполнении запросов
SELECT
(стандартное поведение — весь результат собирается перед отображением). При значении больше нуля результат отображается частями, что позволяет экономить память при больших объемах данных. При использовании этой функции запрос может завершиться сбоем после того, как уже были отображены некоторые строки.::: tipA Совет
Рекомендуется использовать вывод в формате, отличном от
aligned
, поскольку последний плохо работает с постраничной выдачей — ширина столбцов может отличаться между группами строк. :::
Если для этой переменной установлено целое значение больше нуля, результаты запросов SELECT
извлекаются и отображаются группами из такого количества строк, а не стандартное поведение, при котором весь результат собирается перед отображением. Таким образом, используется только ограниченное количество памяти независимо от размера результирующего набора. Значения от 100 до 1000 обычно используются при включении этой функции. Помните, что при использовании этой функции запрос может завершиться сбоем после того, как уже были отображены некоторые строки.
HIDE_TABLEAM
- Скрывает информацию о методе доступа таблиц при значении
true
. Используется преимущественно для регрессионного тестирования.
HIDE_TOAST_COMPRESSION
- Исключает информацию о методе сжатия TOAST-колонок из вывода при значении
true
. Используется преимущественно для регрессионного тестирования.
HISTCONTROL
- Определяет правила включения строк в историю команд:
ignorespace
— игнорируются строки, начинающиеся с пробела;ignoredups
— игнорируются повторяющиеся строки;ignoreboth
— оба вышеуказанных правила;none
(по умолчанию) — сохраняются все команды.
HISTFILE
- Указывает имя файла для хранения истории. При отсутствии значения используется
PSQL_HISTORY
или путь по умолчанию (~/.psql_history
на Unix,%APPDATA%\postgresql\psql_history
в Windows).Можно настроить ведение отдельной истории для каждой базы данных, например:
\set HISTFILE ~/.psql_history-:DBNAME
Размещение в ~/.psqlrc
приведет к тому, что psql
будет поддерживать отдельную историю для каждой базы данных.
HISTSIZE
- Ограничивает количество записей в истории команд (по умолчанию 500). Отрицательное значение отменяет ограничение.
HOST
- Содержит имя или IP-адрес текущего хоста базы данных. Значение обновляется при подключении, но может быть изменено или сброшено.
IGNOREEOF
- Определяет, сколько раз нужно ввести символ EOF (обычно
Ctrl+D
), чтобы завершить интерактивную сессию:- 0 или 1 (по умолчанию) — завершение по одному нажатию;
- >1 — требуется соответствующее число повторов;
- нечисловое значение интерпретируется как 10.
LASTOID
- Содержит значение OID, возвращенное последней командой
INSERT
или\lo_import
. Обновляется только до следующей SQL-команды. В PostgreSQL 12 и выше больше не поддерживаются системные столбцы OID и значение всегда будет 0.
LAST_ERROR_MESSAGE
LAST_ERROR_SQLSTATE
- Содержат текст последней ошибки и ее SQLSTATE-код. Если ошибок не было — пустая строка и
00000
.
ON_ERROR_ROLLBACK
- Управляет поведением в случае ошибки в транзакции:
off
(по умолчанию) — ошибка прерывает транзакцию;on
— продолжается с откатом до точки сохранения;interactive
— откат выполняется только в интерактивном режиме.
Механизм реализуется с помощью автоматического
SAVEPOINT
перед каждой командой.
ON_ERROR_STOP
- По умолчанию обработка команд продолжается после возникновения ошибки. При значении
on
этой переменной выполнение команд прекращается немедленно после ошибки. В интерактивном режимеpsql
вернется к подсказке командной строки, в противном случаеpsql
завершит работу, вернув код ошибки 3, чтобы отличить этот случай от фатальных условий ошибки, которые сообщаются с использованием кода ошибки 1. В любом случае любые текущие сценарии (основной сценарий, если он есть, и любые другие сценарии, которые он мог вызвать) будут немедленно прекращены. Если команда строки содержит несколько SQL-команд, выполнение остановится на текущей.
PORT
- Показывает порт сервера баз данных, к которому установлено текущее подключение. Значение автоматически задается при каждом подключении, включая запуск
psql
, но может быть изменено или сброшено.
PROMPT1
PROMPT2
PROMPT3
- Определяют формат строк подсказки командной строки в
psql
. Подробнее описано в разделе «Подсказки» ниже.
QUIET
- Эквивалентна параметру командной строки
-q
. Вероятно, это не слишком полезно в интерактивном режиме.
ROW_COUNT
- Содержит количество строк, возвращенных или затронутых последним SQL-запросом. При ошибке или отсутствии значения — 0.
SERVER_VERSION_NAME
SERVER_VERSION_NUM
- Выводит версию сервера PostgreSQL, к которому подключен
psql
. Первая переменная содержит строковое значение (например,14.2
,15beta1
), вторая — числовое (например,140002
,150001
). Значения обновляются при каждом подключении, но их можно переопределить или сбросить.
SHELL_ERROR
true
, если последняя оболочка завершилась неудачей,false
, если успешно. Это относится к командам оболочки, вызванным посредством мета-команд\!
,\g
,\o
,\w
,\copy
, а также расширения обратных кавычек (`). Обратите внимание, что для\o
данная переменная обновляется, когда следующая команда\o
закрывает выходной канал.
SHELL_EXIT_CODE
- Код завершения последней команды оболочки. Числа от
0
до127
представляют коды выхода программ, числа от128
до255
указывают на завершение сигнала, а-1
означает невозможность запуска программы или получения ее кода завершения. Это применимо к командам оболочки, вызваным посредством мета-команд\!
,\g
,\o
,\w
,\copy
, а также расширения обратных кавычек (`). Обратите внимание, что для\o
данная переменная обновляется, когда следующая команда\o
закрывает выходной канал.
SHOW_ALL_RESULTS
- Управляет отображением результатов при выполнении нескольких SQL-запросов за один раз. Если установлено значение
off
, показывается только последний результат. По умолчанию —on
.
SHOW_CONTEXT
- Определяет, когда отображать поле
CONTEXT
в сообщениях об ошибках сервера.Возможные значения:
never
— никогда не отображать;errors
(по умолчанию) — показывать только при ошибках;always
— всегда отображать.
Не имеет эффекта при установке
VERBOSITY
наterse
илиsqlstate
. Подробная версия этой ошибки описана в\errverbose
.
SINGLELINE
- Установка этой переменной на
on
эквивалентна параметру командной строки-S
.
SINGLESTEP
- Установка этой переменной на
on
эквивалентна параметру командной строки-s
.
SQLSTATE
- Код состояния SQL, связанный с последним SQL-запросом. При успешном выполнении —
00000
. Возможные значения описаны в «приложении А. Коды ошибок PostgreSQL».
USER
- Показывает имя пользователя, под которым установлено текущее подключение. Задается при подключении и может быть изменено или сброшено.
VERBOSITY
- Настраивает уровень подробности сообщений об ошибках от сервера.
Возможные значения:
default
— стандартный уровень (по умолчанию);verbose
— подробный вывод;terse
— краткий вывод;sqlstate
— только коды ошибок SQL.
VERSION
VERSION_NAME
VERSION_NUM
- Отражают версию самого
psql
.VERSION
— подробная строка версии,VERSION_NAME
— короткий строковый формат (например,13.4
),VERSION_NUM
— числовое представление (например,130004
). Значения устанавливаются при запускеpsql
, но могут быть изменены или сброшены.
Интерполяция SQL
Одна из ключевых возможностей переменных в psql
— это возможность их подстановки (интерполяции) в SQL-запросы и аргументы метакоманд. Кроме того, psql
предоставляет удобные средства для безопасной подстановки значений переменных как SQL-литералов или идентификаторов, с правильной экранизацией.
Синтаксис интерполяции значения без каких-либо кавычек заключается в добавлении двоеточия перед именем переменной (:
), например:
testdb=> \set foo 'my_table'
testdb=> SELECT * FROM :foo;
Этот запрос выберет данные из таблицы my_table
. Однако такой способ может быть небезопасным: значение переменной вставляется как есть, и если оно содержит несбалансированные кавычки или команды с обратной косой чертой, это может привести к ошибкам или даже уязвимостям. Поэтому важно следить за тем, куда вставляется значение переменной и что в нем содержится.
Если значение переменной должно использоваться как SQL-литерал или идентификатор, следует заключать его в соответствующие кавычки. Для безопасной подстановки строки в виде литерала используйте двоеточие и имя переменной, заключенное в одинарные кавычки. Для идентификатора — в двойные.
Эти конструкции корректно обрабатывают вложенные кавычки и специальные символы:
testdb=> \set foo 'my_table'
testdb=> SELECT * FROM :"foo";
Интерполяция не выполняется внутри кавычек обычного SQL. То есть конструкция вроде ':foo'
не интерполирует переменную — и даже если бы работала, она бы некорректно обрабатывала вложенные кавычки, что небезопасно.
Пример практического использования: загрузка содержимого файла в столбец таблицы. Сначала загрузите данные в переменную, затем подставьте ее как строку в кавычках:
testdb=> \set content `cat my_file.txt`
testdb=> INSERT INTO my_table VALUES (:'content');
Обратите внимание, что такой подход не сработает, если файл содержит нулевые байты, так как psql
не поддерживает их в значениях переменных.
Если в тексте команды встречается :name
, :'name'
или :"name"
, и переменная с таким именем не определена, psql
не будет пытаться заменить ее. Это сделано потому, что символ :
может использоваться в стандартном SQL — например, при приведении типов или работе с массивами. Чтобы исключить подстановку, можно экранировать двоеточие обратной косой чертой (\:
).
Также существует специальный синтаксис, позволяющий проверить существование переменной: он всегда будет заменен на логическое значение (
TRUEили
FALSE`), если не экранирован.
Подстановка переменных через :
— это стандартный механизм SQL для встроенных языков запросов (например, ECPG). Однако конструкции вроде :'var'
и :"var"
— расширение psql
, добавленное для безопасной подстановки значений в SQL-запросы.
Подсказки
В psql
можно настраивать вид приглашений (подсказок), используя три специальные переменные: PROMPT1
, PROMPT2
и PROMPT3
. Эти переменные определяют текст, который отображается в разных ситуациях:
PROMPT1
— основная подсказка, выводимая при ожидании новой команды;PROMPT2
— используется, если команда продолжается на следующей строке (например, когда не завершена точкой с запятой или открыта кавычка);PROMPT3
— появляется при вводе данных для командыCOPY FROM STDIN
.
Значения этих переменных выводятся буквально, за исключением символов %
, за которыми следуют специальные обозначения. Они заменяются соответствующими значениями из текущей сессии. Ниже приведены доступные подстановки:
%M
- Полное имя хоста (включая домен) сервера базы данных, либо
[local]
при подключении через Unix-сокет, либо[local:/путь/к/сокету]
, если используется нестандартный путь.
%m
- Имя хоста до первой точки, или
[local]
, если используется Unix-сокет.
%>
- Номер порта, к которому установлено подключение.
%n
- Имя пользователя текущей сессии (может измениться через
SET SESSION AUTHORIZATION
).
%/
- Имя текущей базы данных.
%~
- Аналогично
%/
, но если база данных соответствует имени пользователя, выводится~
.
%#
- Символ
#
, если пользователь — суперпользователь, иначе>
.
%p
- PID текущего процесса PostgreSQL.
%R
- В
PROMPT1
обычно=
, но@
если сессия находится в неактивной ветви условного блока или^
если в однострочном режиме, или!
если сессия отключена от базы данных (что может произойти, если\connect
не удается).Во
PROMPT2
%R
заменяется символом, который зависит от того, почемуpsql
ожидает дополнительного ввода:-
если команда просто еще не завершена, но*
если есть незавершенный комментарий/* ... */
, одиночная кавычка, если есть незаконченная строка в кавычках, двойная кавычка, если есть незаконченный идентификатор в кавычках, знак доллара, если есть незаконченная строка с долларовой кавычкой, или(
если есть нескорректированная левая скобка.В
PROMPT3
%R
ничего не производит.
%x
- Состояние транзакции:
- пустая строка — нет активной транзакции;
*
— транзакция активна;!
— транзакция прервана;?
— состояние неизвестно.
%l
- Номер строки внутри текущего оператора, начиная с
1
.
%digits
- Заменяется символ с указанным восьмеричным кодом.
%:name:
- Значение переменной
psql
равноname
. Подробнее об этом в разделе «Переменные».
%command
- Вывод
command
, аналогичный обычной подстановке «обратная кавычка».
%[ ... %]
- Vркеры для обозначения непечатаемых управляющих символов (например, для изменения цвета текста или заголовка окна терминала). Это необходимо для корректной работы редактирования командной строки. Можно использовать несколько таких пар в одной подсказке. Пример:
testdb=> \set PROMPT1 '%[%033[1;33;40m%]%n@%/%R%[%033[0m%]%# '
Данная подсказка выведет имя пользователя и базу данных в жирном желтом цвете на черном фоне в терминалах, поддерживающих VT100.
%w
- Вставляет пробелы такой же ширины, как последний вывод
PROMPT1
. Это может использоваться в качестве настройкиPROMPT2
, чтобы многострочные выражения выравнивались с первой строкой, но при этом не было видно вторичной подсказки.
%%
- Вставка символа
%
дословно.
Подсказка по умолчанию — это '%/%R%x%# '
для PROMPT1
и PROMPT2
, а также '>> '
для PROMPT3
.
Редактирование командной строки
psql
использует библиотеку Readline (или libedit, если она доступна) для удобного редактирования командной строки и работы с историей ввода. История команд автоматически сохраняется при выходе из psql
и загружается при следующем запуске. Для перемещения по истории можно использовать клавишу со стрелкой вверх или сочетание Control+P
.
Также поддерживается автодополнение с помощью клавиши TAB
. Оно помогает дописывать ключевые слова SQL и имена объектов базы данных в большинстве (хотя и не всех) случаев. Например, если введете ins
в начале команды и нажмете TAB
, psql
дополнит до insert into
. После этого можно начать ввод имени таблицы или схемы и снова нажать TAB
, чтобы автоматически завершить ввод или увидеть список возможных вариантов, если их несколько. (В зависимости от используемой библиотеки может понадобиться нажать TAB
дважды, чтобы отобразить список.)
Стоит учитывать, что для автодополнения имен объектов psql
отправляет запросы к серверу. Это может быть нежелательно в определенных ситуациях. Например, после команды BEGIN
автодополнение может прервать последовательность ввода, не позволив выполнить SET TRANSACTION ISOLATION LEVEL
, если между ними произойдет запрос к серверу.
Если хотите полностью отключить автодополнение TAB
, добавьте следующее в файл .inputrc
в домашнем каталоге:
$if psql
set disable-completion on
$endif
Это настройка самой библиотеки Readline, а не psql
. За дополнительной информацией обратитесь к ее документации.
Кроме того, можно временно отключить Readline, запустив psql
с параметром командной строки -n
(--no-readline
). Это отключает автодополнение, редактирование строк и работу с историей. Такой режим особенно полезен при копировании и вставке текста, содержащего символы TAB
, чтобы избежать нежелательного автодополнения.
Переменные окружения
COLUMNS
- Если значение, установленное с помощью команды
\pset columns
, равно нулю, переменнаяCOLUMNS
управляет шириной вывода в форматеwrapped
. Она также определяет, достаточно ли широк вывод для использования постраничного просмотра или необходимо переключиться на вертикальный формат при автоматическом расширенном режиме.
PGDATABASE
PGHOST
PGPORT
PGUSER
- Параметры подключения по умолчанию.
PG_COLOR
- Указывает, использовать ли цвет в диагностических сообщениях. Возможные значения —
always
,auto
иnever
.
PSQL_EDITOR
EDITOR
VISUAL
- Определяют, какой текстовый редактор будет использоваться при выполнении команд
\e
,\ef
и\ev
. Переменные проверяются по порядку, и используется первая из установленных. Если ни одна не задана, по умолчанию используетсяvi
в Unix-системах иnotepad.exe
в Windows.
PSQL_EDITOR_LINENUMBER_ARG
- Указывает, каким параметром передавать номер строки в редактор при использовании
\e
,\ef
или\ev
с указанием номера строки. Для редакторов вродеvi
илиemacs
это, как правило, символ+
. Обратите внимание, что если между параметром и номером строки требуется пробел, он должен быть явно включен в значение переменной. Примеры:
PSQL_EDITOR_LINENUMBER_ARG='+'
PSQL_EDITOR_LINENUMBER_ARG='--line '
По умолчанию в Unix используется +
, поскольку он совместим с редактором vi
и многими другими. В Windows значение по умолчанию отсутствует.
PSQL_HISTORY
- Альтернативное расположение файла истории команд. Выполняется расширение тильды (
~
).
PSQL_PAGER
PAGER
- Определяют, какая команда будет использоваться для постраничного вывода, если результат запроса превышает размер экрана. Типичные значения —
less
илиmore
. Чтобы полностью отключитьPAGER
, установитеPAGER
или переменнуюLESS
в пустую строку, либо измените параметры через командыpsql
. Проверяются переменные по порядку, используется первая заданная. Если ни одна не установлена, по умолчанию используетсяless
(на большинстве систем) илиmore
(на Cygwin).
PSQL_WATCH_PAGER
- При использовании команды
\watch
(\g
с интервалом повтора),PAGER
по умолчанию не применяется. Установив эту переменную, можно задать собственную команду пейджера для Unix-систем. Например,lv
(внешняя утилита, не входящая в PostgreSQL) с параметром-c
может корректно отображать такой вывод.
PSQLRC
- Альтернативное местоположение файла
.psqlrc
пользователя. Выполняется расширение тильды (~
).
SHELL
- Команда выполняется командой
\!
.
TMPDIR
- Каталог для хранения временных файлов. По умолчанию используется
/tmp
.
Клиент psql
использует переменные окружения, поддерживаемые libpq
.
Файлы
psqlrc
и ~/.psqlrc
: Если не указан параметр -X
, после подключения к базе данных, но до начала обработки пользовательских команд, psql
выполняет команды из двух файлов запуска: сначала из системного (psqlrc
), затем из пользовательского (~/.psqlrc
). Эти файлы обычно применяются для настройки поведения клиента и/или сервера с помощью команд \set
и SET
.
Системный файл запуска называется psqlrc
и по умолчанию размещается в каталоге системной конфигурации установки PostgreSQL. Точное расположение можно определить командой pg_config --sysconfdir
, которая обычно указывает на директорию вида ../etc/
относительно директории с исполняемыми файлами PostgreSQL. Путь к этому каталогу можно изменить, задав переменную окружения PGSYSCONFDIR
.
Пользовательский файл запуска .psqlrc
по умолчанию располагается в домашней директории вызывающего пользователя. В системах Windows вместо него используется файл %APPDATA%\postgresql\psqlrc.conf
. Оба пути могут быть переопределены с помощью переменной окружения PSQLRC
.
Оба файла могут иметь версии, специфичные для определенной версии psql
. Для этого к имени файла добавляется суффикс с основной или полной версией PostgreSQL, например ~/.psqlrc-15
или ~/.psqlrc-15.5
. Если такой файл существует, он будет использоваться в приоритетном порядке перед файлом без указания версии. Суффикс версии добавляется после определения пути к файлу.
.psql_history
- История команд
psql
сохраняется в файле~/.psql_history
, а в Windows — в%APPDATA%\postgresql\psql_history
.Путь к файлу истории можно переопределить через переменную
HISTFILE
, установленную внутриpsql
, либо с помощью переменной окруженияPSQL_HISTORY
.
Примечания
При использовании psql
важно учитывать особенности взаимодействия клиента с серверами PostgreSQL различных версий, особенно при наличии отличий в основных версиях:
-
Клиент
psql
наиболее надежно работает с серверами PostgreSQL той же или более старой основной версии. Команды, начинающиеся с обратной косой черты (например,\d
), могут не работать корректно, если сервер имеет более новую версию, чем самpsql
. Тем не менее, команды\d
и аналогичные обычно остаются работоспособными при подключении к серверам до версии 9.2, хотя и не обязательно с серверами новее, чемpsql
сам по себе.Выполнение SQL-команд и отображение результатов также должна работать с серверами более новой основной версии, но это поведение не гарантировано.
-
Если необходимо использовать
psql
с несколькими серверами разных версий, рекомендуется использовать самую свежую версиюpsql
. Альтернативой может быть установка отдельных копийpsql
для каждой основной версии и использование соответствующей копии для каждого сервера, однако в большинстве случаев это излишне. -
В версиях до PostgreSQL 9.6 параметр
-c
подразумевал использование-X
(--no-psqlrc
), начиная с 9.6 это поведение изменено. -
До версии PostgreSQL 8.4
psql
позволял указывать первый аргумент команды без пробела сразу после обратной косой черты — теперь между командой и аргументом обязательно требуется пробел.
Примечания для пользователей Windows
Клиент psql
реализован как консольное приложение. Поскольку консоль Windows использует отдельную кодировку, при работе с 8-битными символами в psql
могут возникать проблемы. При запуске psql
выдает предупреждение, если определяет неподдерживаемую кодовую страницу. Чтобы избежать проблем, необходимо:
-
Установить корректную кодовую страницу консоли, например:
cmd.exe /c chcp 1252
Где значение 1252 подходит для немецкой локали, для других языков следует указать соответствующую кодовую страницу.
В Cygwin можно добавить эту команду в файл
/etc/profile
. -
Изменить шрифт консоли на
Lucida Console
, так как стандартный растровый шрифт несовместим с ANSI-страницами.
Примеры
Первый пример показывает, как разбить команду на несколько строк ввода. Обратите внимание на изменение подсказки:
testdb=> CREATE TABLE my_table (
testdb(> first integer not null default 0,
testdb(> second text)
testdb-> ;
CREATE TABLE
Просмотр описания таблицы:
testdb=> \d my_table
Table "public.my_table"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
first | integer | | not null | 0
second | text | | |
Измение подсказки командной строки на более информативное:
testdb=> \set PROMPT1 '%n@%m %~%R%# '
peter@localhost testdb=>
Просмотр таблицы:
peter@localhost testdb=> SELECT * FROM my_table;
first | second
-------+--------
1 | one
2 | two
3 | three
4 | four
(4 rows)
Форматирование вывода с помощью \pset
Установка стиля границ:
peter@localhost testdb=> \pset border 2
Border style is 2.
peter@localhost testdb=> SELECT * FROM my_table;
+-------+--------+
| first | second |
+-------+--------+
| 1 | one |
| 2 | two |
| 3 | three |
| 4 | four |
+-------+--------+
(4 rows)
Отключение границ:
peter@localhost testdb=> \pset border 0
Border style is 0.
peter@localhost testdb=> SELECT * FROM my_table;
first second
----- ------
1 one
2 two
3 three
4 four
(4 rows)
Вывод в формате CSV, только кортежи:
peter@localhost testdb=> \pset border 1
Border style is 1.
peter@localhost testdb=> \pset format csv
Output format is csv.
peter@localhost testdb=> \pset tuples_only
Tuples only is on.
peter@localhost testdb=> SELECT second, first FROM my_table;
one,1
two,2
three,3
four,4
Вывод в неформатированном виде с табуляцией:
peter@localhost testdb=> \pset format unaligned
Output format is unaligned.
peter@localhost testdb=> \pset fieldsep '\t'
Field separator is " ".
peter@localhost testdb=> SELECT second, first FROM my_table;
one 1
two 2
three 3
four 4
Краткие команды форматирования вывода:
peter@localhost testdb=> \a \t \x
Output format is aligned.
Tuples only is off.
Expanded display is on.
peter@localhost testdb=> SELECT * FROM my_table;
-[ RECORD 1 ]-
first | 1
second | one
-[ RECORD 2 ]-
first | 2
second | two
-[ RECORD 3 ]-
first | 3
second | three
-[ RECORD 4 ]-
first | 4
second | four
Параметры формата вывода могут быть установлены только для одного запроса с использованием \g
:
peter@localhost testdb=> SELECT * FROM my_table
peter@localhost testdb-> \g (format=aligned tuples_only=off expanded=on)
-[ RECORD 1 ]-
first | 1
second | one
-[ RECORD 2 ]-
first | 2
second | two
-[ RECORD 3 ]-
first | 3
second | three
-[ RECORD 4 ]-
first | 4
second | four
Поиск функций с помощью \df
Поиск функций, имя которых начинается на int
и заканчивается pl
, а второй аргумент имеет тип bigint
:
testdb=> \df int*pl * bigint
List of functions
Schema | Name | Result data type | Argument data types | Type
------------+---------+------------------+---------------------+------
pg_catalog | int28pl | bigint | smallint, bigint | func
pg_catalog | int48pl | bigint | integer, bigint | func
pg_catalog | int8pl | bigint | bigint, bigint | func
(3 rows)
Представление результатов в виде кросстаблицы (\crosstabview
):
testdb=> SELECT first, second, first > 2 AS gt2 FROM my_table;
first | second | gt2
-------+--------+-----
1 | one | f
2 | two | f
3 | three | t
4 | four | t
(4 rows)
testdb=> \crosstabview first second
first | one | two | three | four
-------+-----+-----+-------+------
1 | f | | |
2 | | f | |
3 | | | t |
4 | | | | t
(4 rows)
Пример таблицы умножения, отсортированной по строкам в обратном числовом порядке и по столбцам с независимым возрастающим числовым порядком:
testdb=> SELECT t1.first as "A", t2.first+100 AS "B", t1.first*(t2.first+100) as "AxB",
testdb-> row_number() over(order by t2.first) AS ord
testdb-> FROM my_table t1 CROSS JOIN my_table t2 ORDER BY 1 DESC
testdb-> \crosstabview "A" "B" "AxB" ord
A | 101 | 102 | 103 | 104
---+-----+-----+-----+-----
4 | 404 | 408 | 412 | 416
3 | 303 | 306 | 309 | 312
2 | 202 | 204 | 206 | 208
1 | 101 | 102 | 103 | 104
(4 rows)