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 (эквивалентно точке с запятой
;).noteЭтот режим существует для тех, кто предпочитает его использование, но не является обязательным. Если комбинируете 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
Также параметры подключения можно задать через переменные окружения:
PGDATABASEPGUSERPGHOSTPGPORT
Для автоматической аутентификации по паролю рекомендуется использовать файл ~/.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 будет использоваться только в том случае, если оно активно на внешнем уровне.noteДля отображения строк по мере выполнения можно установить переменную
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. По умолчанию используется запятая.expandedx: Устанавливает вертикальный формат вывода. Значение должно быть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'. Для неуказанных столбцов используется последнее значение из списка.
titleC- Задает заголовок для таблиц в выводе, например, описание запроса. Если значение не указано, заголовок сбрасывается. Можно использовать для того, чтобы дать результатам описательные метки.
tuples_onlyt: Включает (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 [...]]]- Создает или изменяет переменную
psqlname. Если указано несколько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_MESSAGELAST_ERROR_SQLSTATE- Содержат текст последней ошибки и ее SQLSTATE-код. Если ошибок не было — пустая строка и
00000.
ON_ERROR_ROLLBACK- Управляет поведением в случае ошибки в транзакции:
off(по умолчанию) — ошибка прерывает транзакцию;on— продолжается с откатом до точки сохранения;interactive— откат выполняется только в интерактивном режиме.
Механизм реализуется с помощью автоматического
SAVEPOINTперед каждой командой.
ON_ERROR_STOP- По умолчанию обработка команд продолжается после возникновения ошибки. При значении
onэтой переменной выполнение команд прекращается немедленно после ошибки. В интерактивном режимеpsqlвернется к подсказке командной строки, в противном случаеpsqlзавершит работу, вернув код ошибки 3, чтобы отличить этот случай от фатальных условий ошибки, которые сообщаются с использованием кода ошибки 1. В любом случае любые текущие сценарии (основной сценарий, если он есть, и любые другие сценарии, которые он мог вызвать) будут немедленно прекращены. Если команда строки содержит несколько SQL-команд, выполнение остановится на текущей.
PORT- Показывает порт сервера баз данных, к которому установлено текущее подключение. Значение автоматически задается при каждом подключении, включая запуск
psql, но может быть изменено или сброшено.
PROMPT1PROMPT2PROMPT3- Определяют формат строк подсказки командной строки в
psql. Подробнее описано в разделе «Подсказки» ниже.
QUIET- Эквивалентна параметру командной строки
-q. Вероятно, это не слишком полезно в интерактивном режиме.
ROW_COUNT- Содержит количество строк, возвращенных или затронутых последним SQL-запросом. При ошибке или отсутствии значения — 0.
SERVER_VERSION_NAMESERVER_VERSION_NUM- Выводит версию сервера PostgreSQL, к которому подключен
psql. Первая переменная содержит строковое значение (например,14.2,15beta1), вторая — числовое (например,140002,150001). Значения обновляются при каждом подключении, но их можно переопределить или сбросить.
SHELL_ERRORtrue, если последняя оболочка завершилась неудачей,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.
VERSIONVERSION_NAMEVERSION_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. Она также определяет, достаточно ли широк вывод для использования постраничного просмотра или необходимо переключиться на вертикальный формат при автоматическом расширенном режиме.
PGDATABASEPGHOSTPGPORTPGUSER- Параметры подключения по умолчанию.
PG_COLOR- Указывает, использовать ли цвет в диагностических сообщениях. Возможные значения —
always,autoиnever.
PSQL_EDITOREDITORVISUAL- Определяют, какой текстовый редактор будет использоваться при выполнении команд
\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_PAGERPAGER- Определяют, какая команда будет использоваться для постраничного вывода, если результат запроса превышает размер экрана. Типичные значения —
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)