Перейти к основному содержимому

psql

примечание

Эта страница переведена при помощи нейросети GigaChat.

Предупреждение!

В подразделе «Совместимость psql» приведено описание совместимости утилиты при использовании различных версий клиентской и серверной частей СУБД Pangolin.

psql — интерактивный терминал PostgreSQL.

Синтаксис

psql [option...] [dbname [username]]

Описание

psql — терминальный клиент для взаимодействия с PostgreSQL. Она позволяет выполнять SQL-запросы в интерактивном режиме, передавать их серверу и просматривать результаты. Также psql поддерживает чтение команд из файлов или аргументов командной строки. Помимо этого, psql предлагает набор метакоманд и функций, схожих с возможностями командной оболочки, что делает ее удобным инструментом для создания сценариев и автоматизации различных операций.

Совместимость psql

Клиент psql совместим со всеми поддерживаемыми версиями СУБД Pangolin, при этом его функциональность соответствует мажорной версии сервера и ограничивается версиями API, предоставляемыми операционными системами клиента и сервера (например, OpenSSL).

psql сохраняет обратную совместимость с поддерживаемыми версиями СУБД Pangolin, чьи мажорные версии ниже текущей, при условии, что они находятся в рамках жизненного цикла поддержки и совместимы с соответствующими версиями API.

Клиент psql работает с логическими дампами, созданными с помощью pg_dump и pg_dumpall в формате plain, если версия этих утилит соответствует мажорной версии, используемой на клиенте.

Метакоманды psql совместимы как с текущей мажорной версией СУБД, так и с более ранними мажорными версиями в рамках срока их поддержки.

Содержание встроенной справки (\help) в psql соответствует текущей мажорной версии СУБД.

Параметры

Для клиента psql существуют следующие параметры командной строки:

-a
--echo-all
Выводит в стандартный вывод все непустые строки ввода по мере их чтения, за исключением интерактивного ввода. Аналогично установке переменной ECHO в значении all.
-A
--no-align
Переключает вывод в режим без выравнивания (по умолчанию используется формат aligned). Аналогично метакоманде \pset format unaligned.
-b
--echo-errors
Показывает SQL-команды, завершившиеся ошибкой, в стандартном потоке ошибок. Аналогично установке переменной ECHO в значении errors.
-c command
--command=command
Указывает строку команды comand, которую нужно выполнить. Параметр можно указать несколько раз и использовать совместно с параметром -f. Если присутствует хотя бы один из параметров -c или -f, psql не будет читать команды из стандартного ввода, а завершит выполнение после последовательной обработки всех таких параметров.

Значение команда должно быть либо полной SQL-командой, которую целиком обрабатывает сервер (то есть без использования специфических для psql конструкций), либо одной метакомандой psql, начинающейся с обратной косой черты. Нельзя смешивать SQL и метакоманды в одной строке при использовании -c. Чтобы выполнить и SQL, и метакоманды, можно указать несколько -c, например:

psql -c '\x' -c 'SELECT * FROM foo;'

или передать команды через стандартный ввод:

echo '\x \\ SELECT * FROM foo;' | psql

В этом примере \ используется как разделитель метакоманд.

Каждая строка, переданная через -c, отправляется серверу как единичный SQL-запрос. Если в строке несколько SQL-команд, они будут выполнены как одна транзакция, если только внутри строки явно не заданы команды BEGIN и COMMIT. Подробнее о поведении сервера при обработке нескольких запросов описано в разделе «Несколько операторов в простом запросе».

Если требуется выполнение всех команд в одной транзакции, используйте несколько параметров -c или передайте команды через стандартный ввод psql, например, с помощью echo, как показано выше, либо создаваемый прямо в оболочке текст, например:

psql <<EOF
\x
SELECT * FROM foo;
EOF
--csv
Устанавливает формат вывода в CSV (значения, разделенные запятыми). Аналогично метакоманде \pset format csv.
-d dbname
--dbname=dbname
Задает имя базы данных для подключения. Равнозначно указанию dbname как первого параметра без ключа в командной строке. dbname может быть строкой подключения. В этом случае параметры строки подключения имеют приоритет над одноименными параметрами командной строки.
-e
--echo-queries
Дублирует все отправляемые на сервер SQL-команды в стандартный вывод. Аналогично установке переменной ECHO в значении queries.
-E
--echo-hidden
Выводит фактические запросы, генерируемые \d и другими командами, начинающимися с обратной косой черты \. Это можно использовать для изучения внутренних операций в psql. Аналогично установке переменной ECHO_HIDDEN в значении on.
-f filename
--file=filename
Чтение команд из файла filename вместо стандартного ввода. Параметр можно указывать несколько раз и комбинировать с параметром -c в любом порядке. Если задан хотя бы один из параметров -f или -c, psql не будет использовать стандартный ввод и завершит выполнение после обработки всех команд, переданных через -f и -c, в порядке их указания. Аналогично метакоманде \i, за исключением особенностей запуска.

Если в качестве filename указано -, команды будут считываться из стандартного ввода до достижения конца файла (EOF) или выполнения команды \q. Это позволяет чередовать интерактивный ввод с вводом из файлов. Однако следует учитывать, что в этом режиме не используется поддержка Readline (аналогично указанию параметра -n).

Хотя команды можно передавать и через стандартное перенаправление ввода (например, psql < filename), использование -f дает преимущества — такие как отображение ошибок с указанием номеров строк и (в некоторых случаях) более быстрая и эффективная обработка.

-F separator
--field-separator=separator
Задает разделитель полей separator для невыровненного вывода. Аналогично метакомандам \pset fieldsep или \f.
-h host
--host = host
Указывает хост компьютера, на котором запущен сервер. Если значение начинается с косой черты, выполняется подключение к Unix-сокету.
-H
--html
Переводит вывод в HTML-формат. Аналогично метакомандам \pset format html или \H.
-l
--list
Выводит список всех доступных баз данных и завершает выполнение. Все параметры, не касающиеся подключения, игнорируются. Аналогично метакоманде \list.

Если база данных явно не указана (например, через параметр -d или аргумент без параметра, возможно через запись службы, но не через переменную окружения), psql подключается к базе данных postgres.

-L filename
--log-file=filename
Записывает результаты выполнения запросов в указанный файл filename, в дополнение к обычному месту назначения вывода.
-n
--no-readline
Отключает поддержку Readline (редактирование строк, история ввода). Подробнее описано ниже в разделе «Редактирование командной строки».
-o filename
--output=filename
Перенаправляет вывод запросов в указанный файл filename. Аналогично метакоманде \o.
-p port
--port = port
Указывает TCP-порт или расширение файла локального Unix-сокета для подключения к серверу. Значение по умолчанию берется из переменной окружения PGPORT или задается при компиляции, обычно 5432.
-P assignment
--pset=assignment
Устанавливает параметры форматирования вывода, аналогично метакоманде \pset. Обратите внимание, что имя параметра и значение разделяются знаком равенства, а не пробела. Например, чтобы установить формат вывода на LaTeX, нужно написать -P format=latex.
-q
--quiet
Подавляет приветствие и информационные сообщения (вывод по умолчанию). Полезно с параметром -c.
-R separator
--record-separator=separator
Устанавливает разделитель записей separator для невыровненного формата. Аналогично метакоманде \pset recordsep.
-s
--single-step
Включает пошаговый режим выполнения с подтверждением перед каждой командой. Используется для отладки сценариев.
-S
--single-line
Включает однострочный режим: каждая новая строка рассматривается как завершение команды SQL (эквивалентно точке с запятой ;).
примечание

Этот режим существует для тех, кто предпочитает его использование, но не является обязательным. Если комбинируете SQL и метакоманды в одной строке, порядок выполнения может быть неочевидным.

-t
--tuples-only
Отключает заголовки столбцов и результирующей строки с количеством выбранных записей. Аналогично метакомандам \pset tuples_only или \t.
-T table_options
--table-attr=table_options
Задает HTML-атрибуты для тега <table>. Подробнее об этом в описании метакоманды \pset tableattr.
-U username
--username=username
Указывает имя пользователя для подключения вместо подразумеваемого по умолчанию (требует соответствующего разрешения).
-v assignment
--set=assignment
--variable=assignment
Позволяет установить переменные psql Аналогично метакоманде \set. Значение переменной должно быть задано с помощью знака равенства (=).

Чтобы установить переменную без значения, укажите знак равенства, но не пишите значение (-v var=). Чтобы сбросить переменную, укажите только имя без знака равенства (-v var).

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

-V
--version
Выводит версию psql и завершается.
-w
--no-password
Отключает запрос на ввод пароля. Если сервер требует аутентификации по паролю и пароль недоступен другими способами, такими как файл .pgpass, попытка подключения завершится неудачей. Параметр полезен в пакетных заданиях и сценариях, где нет пользователя, который мог бы ввести пароль.

Обратите внимание, что параметр действует на протяжении всего сеанса и, таким образом, влияет на метакоманду \connect, а так же на первую попытку подключения.

-W
--password
Запрашивает пароль перед подключением к базе данных, даже если пароль не будет использоваться..

Параметр не является обязательным, поскольку psql автоматически запросит пароль, если сервер требует аутентификацию паролем. Однако psql потратит попытку подключения, чтобы выяснить, что сервер хочет пароль. В некоторых случаях стоит ввести -W, чтобы избежать дополнительной попытки подключения.

Обратите внимание, что параметр действует на протяжении всего сеанса и, таким образом, влияет на метакоманду \connect, а так же на первую попытку подключения.

-x
--expanded
Включает расширенный (вертикальный) режим вывода. Аналогично метакомандам \pset expanded или \x.
-X,
--no-psqlrc
Не читает конфигурационные файлы запуска (ни системный файл psqlrc, ни пользовательский файл ~/.psqlrc).
-z
--field-separator-zero
Устанавливает разделитель полей для невыровненного вывода равным нулю. Аналогично метакоманде \pset fieldsep_zero.
-0
--record-separator-zero
Устанавливает разделитель записей невыровненного вывода равным нулю. Аналогично метакоманде \pset fieldsep_zero. Полезно при взаимодействии, например, с xargs -0.
-1
--single-transaction
Используется вместе с одним или несколькими параметрами -c и/или -f, чтобы выполнить все команды в рамках одной транзакции. Перед выполнением первой команды psql отправляет BEGIN, а после последней — COMMIT. Если какая-либо команда завершится с ошибкой и установлена переменная ON_ERROR_STOP, выполняется откат транзакции (ROLLBACK).
Внимание!

Если переданные команды уже содержат BEGIN, COMMIT или ROLLBACK, этот параметр может не сработать как ожидается. Также, если одна из команд несовместима с транзакционным блоком, это приведет к провалу всей транзакции.

-?
--help[=topic]
Показывает справку по psql и завершается. Необязательный параметр topic, выбирает, какая часть psql объясняется: commands описывает команды обратной косой черты psql, options описывает параметры командной строки (по умолчанию), которые могут быть переданы psql и variables показывает помощь по переменным конфигурации psql.

Код завершения

psql завершает работу со следующими кодами завершения:

  • 0 — успешное завершение работы;
  • 1 — фатальная внутренняя ошибка, такая как невозможность выделения памяти или отсутствие файла;
  • 2 — потеря соединения с сервером в неинтерактивном режиме;
  • 3 — ошибка выполнения SQL-команды при установленном параметре ON_ERROR_STOP.

Использование

Подключение к базе данных

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

  • имя базы данных (-d);
  • хост (-h);
  • порт (-p);
  • имя пользователя (-U).

Если аргумент найден, который не принадлежит никакой опции, он интерпретируется как имя базы данных (или имя пользователя базы данных, если уже дано имя базы данных).

Если один или несколько параметров не заданы, используются значения по умолчанию:

  • имя базы данных и имя пользователя — совпадают с именем текущего пользователя операционной системы;
  • хост — локальный сокет домена Unix или localhost при отсутствии поддержки сокетов;
  • порт — стандартный порт PostgreSQL, заданный во время компиляции.

Обратите внимание, что нельзя просто подключиться к любой базе данных под любым именем пользователя. Узнать о доступных правах можно у администратора баз данных.

Альтернативно, параметры подключения могут быть заданы в виде строки подключения (conninfo) или URI:

$ psql "service=myservice sslmode=require"
$ psql postgresql://dbmaster:5433/mydb?sslmode=require

Также параметры подключения можно задать через переменные окружения:

  • PGDATABASE
  • PGUSER
  • PGHOST
  • PGPORT

Для автоматической аутентификации по паролю рекомендуется использовать файл ~/.pgpass.

Также поддерживается использование LDAP для получения параметров подключения.

Если подключение установить не удалось, psql завершит работу с сообщением об ошибке.

Если и стандартный ввод, и вывод — это терминалы, psql автоматически устанавливает клиентскую кодировку в режим auto, используя настройки локали (например, переменную LC_CTYPE в Unix-системах). При необходимости ее можно переопределить, установив переменную PGCLIENTENCODING.

Ввод SQL-команд

При нормальной работе psql предоставляет подсказку с именем базы данных, к которой в данный момент подключен psql, за которым следует строка =>. Например:

Подсказка psql состоит из имени базы данных, к которой psql в данный момент подключен, за которым следует строка =>, например:

$ psql testdb
psql (17.5)
Type "help" for help.

testdb=>

В этом режиме пользователь может вводить SQL-команды. Команда считается завершенной, когда вводится точка с запятой (;). Просто нажать Enter недостаточно — это позволяет писать команды в несколько строк для удобства и читаемости. После отправки команда передается серверу, и, если выполнена успешно, результат отображается в терминале.

Безопасность

Если в системе есть ненадежные пользователи, убедитесь, что не работаете с общедоступными схемами, доступными на запись. Для этого удалите такие схемы из search_path, указав его явно либо в строке подключения, либо как параметр options=-csearch_path= перед остальными SQL-командами. Это касается не только psql, но и любых интерфейсов, которые могут исполнять произвольные SQL-запросы.

После каждой выполненной команды psql также проверяет наличие уведомлений, отправленных через команды LISTEN и NOTIFY.

Хотя блочные комментарии в стиле C передаются серверу для обработки и удаления, комментарии стандарта SQL удаляются psql.

Метакоманды

Любая строка в psql, начинающаяся с обратной косой черты (\), считается метакомандой psql, которая обрабатывается самим клиентом, а не сервером PostgreSQL. Эти команды упрощают администрирование и написание скриптов. Часто их называют «командами слеша» или «обратного слеша».

Метакоманда начинается с \, за которым следует название команды, а затем — аргументы. Аргументы отделяются от команды и друг от друга пробельными символами (одним или несколькими).

Если в аргументе нужно сохранить пробелы, его следует заключить в одинарные кавычки. Чтобы добавить саму одинарную кавычку внутрь такого аргумента, нужно использовать две подряд. Аргументы в одинарных кавычках подлежат заменам, принятым в языке C: \n (новая строка), \t (табуляция), \b (возврат назад), \r (возврат каретки), \f (перевод страницы), \digits (восьмеричное число), и \xdigits (шестнадцатеричное число). Если внутри текста в одинарных кавычках встречается обратная косая перед любым другим символом, то она экранирует этот символ.

Если в аргументе без кавычек встречается : с последующим именем переменной psql, она заменяется значением переменной, как описано в разделе «Интерполяция SQL» ниже. Также доступны формы :'variable_name' и :"variable_name", работающие аналогично. С помощью конструкции :{?variable_name} можно проверить, существует ли переменная: результатом будет TRUE или FALSE. Чтобы предотвратить замену, перед двоеточием ставится обратная косая черта (\:).

Текст, заключенный в обратные кавычки, воспринимается как командная строка, которая передается в командную оболочку операционной системы. Результат ее выполнения (без завершающей новой строки) подставляется вместо текста в обратных кавычках. Внутри такого блока нет дополнительного экранирования, но переменные psql подставляются: как в виде :variable_name, так и в форме :'variable_name', причем последняя предпочтительнее — она гарантирует, что значение будет передано как один аргумент оболочке. Если переменная содержит символы возврата каретки или перевода строки, форма :'variable_name' вызовет ошибку, так как такие символы не всегда безопасно обрабатывать на разных платформах.

Некоторые команды требуют аргумент в виде SQL-идентификатора (например, имени таблицы). Такие аргументы подчиняются SQL-правилам: буквы без кавычек автоматически приводятся к нижнему регистру, а заключенные в двойные кавычки ("...") сохраняют регистр и могут содержать пробелы. В двойных кавычках парные двойные кавычки сводятся к одной двойной кавычке в полученном имени. К примеру, FOO"BAR"BAZ преобразуется в fooBARbaz, а "A weird"" name" — в A weird" name.

Анализ аргументов метакоманды завершается либо в конце строки, либо при появлении символа обратного слеша \, который интерпретируется как начало новой метакоманды. Специальная последовательность \\ используется для завершения списка аргументов метакоманды и продолжения анализа SQL-команд, если они есть. Это позволяет комбинировать SQL и метакоманды в одной строке. Однако аргументы метакоманды не могут продолжаться за пределами строки.

Многие метакоманды работают с текущим буфером запроса — это временное хранилище SQL-команды, который был введен, но еще не отправлен серверу для выполнения. В буфер включаются как строки, введенные ранее, так и SQL-текст перед метакомандой в той же строке.

Определены следующие метакоманды:

\a
Переключает режим выравнивания вывода. Если используется выровненный формат (aligned), он отключается, и наоборот. Команда оставлена для обратной совместимости. Для более гибкой настройки используйте \pset.
\bind [ parameter ] ...
Устанавливает параметры запроса для следующего выполнения запроса, передав указанные параметры для любых заполнителей параметров ($1 и т.п.).

Пример:

INSERT INTO tbl1 VALUES ($1, $2) \bind 'first value' 'second value' \g

Это также работает для команд выполнения запросов помимо \g, таких как \gx и \gset.

Эта команда приводит к использованию протокола расширенных запросов, в отличие от обычного режима работы psql, который использует простой протокол запроса. Таким образом, эта команда может быть полезна для тестирования протокола расширенных запросов из psql. Расширенный протокол запроса используется даже если запрос не имеет параметров и данная команда указывает ноль параметров. Эта команда влияет только на следующий выполняемый запрос, все последующие запросы будут использовать по умолчанию простой протокол запроса.

\c
\connect [ -reuse-previous=on|off ] [ dbname [ username ] [ host ] [ port ] | conninfo ]
Устанавливает новое соединение с сервером PostgreSQL. Подключение можно выполнить, указав параметры позиционно (имя базы данных, пользователя, хоста, порта) или через строку подключения conninfo. Если параметры не указаны, подключение будет выполнено с использованием текущих значений. Символ - вместо любого из параметров позиционного синтаксиса означает его пропуск.

Новое соединение может повторно использовать параметры соединения от предыдущего соединения; не только имя базы данных, пользователь, хост и порт, но и другие настройки, такие как sslmode. По умолчанию параметры предыдущего соединения переиспользуются при позиционном вводе, но не при использовании строки conninfo. Поведение можно переопределить с помощью -reuse-previous=on|off. При повторном использовании, любые неуказанные явно параметры берутся из последнего успешного соединения. Исключение: если хост изменяется позиционно, то параметр hostaddr из предыдущего соединения игнорируется. Также пароль будет переиспользован только при сохранении тех же значений пользователя, хоста и порта. Если какой-либо параметр не указан в этой команде и не используется повторно, действует принятое в libpq значение по умолчанию.

При успешном подключении предыдущее соединение закрывается. Если подключение не удалось, поведение зависит от режима работы: в интерактивном режиме старое соединение сохраняется, в неинтерактивном — закрывается, и выполнение скрипта может завершиться ошибкой. Повторное использование параметров при неудачном \connect в неинтерактивном режиме не допускается.

Примеры:

=> \c mydb myuser host.dom 6432
=> \c service=foo
=> \c "host=localhost port=5432 dbname=mydb connect_timeout=10 sslmode=disable"
=> \c -reuse-previous=on sslmode=require -- changes only sslmode
=> \c postgresql://tom@localhost/mydb?application_name=myapp
\C [title]
Устанавливает или убирает заголовок таблицы, отображаемой в результате выполнения запроса. Аналогично метакоманде \pset title.
\cd [directory]
Меняет текущий рабочий каталог на указанный путь directory. Если путь не задан, происходит переход в домашнюю директорию пользователя.
Совет

Чтобы узнать текущий рабочий каталог, выполните \! pwd.

\conninfo
Выводит параметры текущего подключения к базе данных.
\copy { table [ ( column_list ) ] } from { 'filename' | program 'command' | stdin | pstdin } [ [ with ] ( option [, ...] ) ] [ where condition ]
\copy { table [ ( column_list ) ] | ( query ) } to { 'filename' | program 'command' | stdout | pstdout } [ [ with ] ( option [, ...] ) ]
Копирует данные между таблицей PostgreSQL и локальной файловой системой с помощью клиента. Это аналог SQL-команды COPY, но операции чтения/записи выполняются psql, а не сервером. Это означает, что доступ к файлам осуществляется от имени локального пользователя, и не требуются права суперпользователя.

При использовании program команда запускается клиентом, и данные передаются между сервером и внешней программой. Это также не требует суперпользовательских прав.

Вариант \copy ... from stdin читает данные из текущего источника ввода, пока не встретит \. или конец файла (EOF). Этот вариант полезен для заполнения таблиц внутри файла сценария SQL. \copy ... to stdout выводит данные в текущий поток вывода без сообщения COPY count. Используйте pstdin и pstdout, чтобы принудительно использовать стандартные потоки независимо от текущих настроек psql.

Вся строка после \copy рассматривается как аргументы команды, без подстановки переменных и выполнения обратных кавычек.

Совет

Альтернативный способ: использовать SQL-команду COPY ... TO STDOUT с последующим \g filename или \g |program. Этот способ позволяет разбивать команду на несколько строк и использовать интерполяцию переменных и расширение обратных кавычек.

\copy менее эффективен, чем серверная команда COPY, так как данные передаются через клиент-серверное соединение. Для больших объемов данных рекомендуется использовать серверную версию. Также в режиме CSV команда \copy ... from может ошибочно интерпретировать строку \. как конец ввода.

\copyright
Выводит лицензионную информацию и условия распространения PostgreSQL.
\crosstabview [ colV [ colH [ colD [ sortcolH ] ] ] ]
Выполняет текущий SQL-запрос (аналогично \g) и отображает результаты в виде перекрестной таблицы. Требуется минимум три столбца в результатах:
  • colV: вертикальный заголовок (по умолчанию первый столбец);
  • colH: горизонтальный заголовок (по умолчанию второй столбец);
  • colD: значение внутри ячеек (если не задан, берется оставшийся столбец);
  • sortcolH: определяет необязательный столбец сортировки для горизонтального заголовка.

Каждый параметр может быть задан как по имени, так и по номеру (нумерация с 1). Имена столбцов обрабатываются по правилам SQL — с учетом регистра и кавычек. Если параметры colV и colH не указаны, используются первый и второй столбцы результата соответственно. Они не должны совпадать. Если colD не задан, предполагается, что в запросе ровно три столбца, и третий будет использоваться как colD.

Вертикальные заголовки (в первом столбце) формируются из уникальных значений colV в порядке их появления в результатах запроса без дубликатов. Горизонтальные заголовки (первая строка) — из уникальных значений ``colHтакже в порядке их появления без дубликатов, если не задан параметрsortcolH. Если sortcolH` указан, заголовки сортируются по значениям этого столбца, который должен содержать целые числа.

Каждая ячейка таблицы соответствует паре значений из colH и colV, и содержит значение из colD той строки, где они совпадают. Если подходящих строк нет — ячейка остается пустой. Если найдено несколько совпадающих строк — возникает ошибка.

\d[S+] [pattern]
Выводит подробную информацию о каждой таблице, представлении, материализованном представлении, индексе, последовательности, внешней таблице или составном типе, соответствующем pattern. Включает список столбцов, их типы, табличное пространство (если отличается от стандартного), ограничения (NOT NULL, значения по умолчанию), связанные индексы, ограничения, правила и триггеры. Для внешних таблиц также отображается внешний сервер. «Соответствие шаблону» определено в разделе Шаблоны ниже.

Для некоторых типов связей, команда \d показывает дополнительную информацию для каждого столбца: значения столбцов для последовательностей, индексированные выражения для индексов и параметры внешнего обертки данных для внешних таблиц.

Команда \d+ дополнительно показывает комментарии, наличие OID, определение представления, настройку идентичности реплики (REPLICA IDENTITY) и имя метода доступа, если он задан.

Без pattern эквивалентно метакоманде \dtvmsE, которая покажет список всех видимых таблиц, представлений, материализованных представлений, последовательностей и внешних таблиц. По умолчанию системные объекты скрыты, используйте шаблон или аргумент S для их отображения.

\da[S] [pattern]
Выводит агрегатные функции, их тип возвращаемого значения и типы входных данных. Если указан pattern, фильтрует агрегаты по имени. Системные объекты показываются только при использовании шаблона или аргумента S.
\dA[+] [pattern]
Выводит зарегистрированные методы доступа. Если указан pattern, отображаются только те методы доступа, чьи имена соответствуют шаблону. Если + добавляется к имени команды, каждый метод доступа выводится с его связанной функцией обработки и описанием.
\dAc[+] [access-method-pattern [input-type-pattern]]
Выводит классы операторов для методов доступа. Если указано значение access-method-pattern, то будут выведены только те классы операторов, которые связаны с методами доступа, имена которых соответствуют указанному шаблону. Если указано значение input-type-pattern, то будут выведены только те классы операторов, которые связаны с типами ввода, имена которых соответствуют указанному шаблону. При добавлении + выводит также операторные семьи и владельца. Фильтрация возможна по методу доступа и типу ввода.
\dAf[+] [access-method-pattern [input-type-pattern]]
Выводит семейства операторов. Если указано значение access-method-pattern, то будут выведены только семейства операторов, связанные с методами доступа, имена которых соответствуют указанному шаблону. Если указано значение input-type-pattern, то будут выведены только семейства операторов, связанные с типами ввода, имена которых соответствуют указанному шаблону. При добавлении + выводит также владельца. Можно фильтровать по методу доступа и типу ввода.
\dAo[+] [access-method-pattern [operator-family-pattern]]
Выводит операторы в составе семейств операторов. Если указано значение access-method-pattern, то будут выведены только члены семейств операторов, связанных с методами доступа, имена которых соответствуют указанному шаблону. Если указано значение operator-family-pattern, то будут выведены только члены семейств операторов, чьи имена соответствуют указанному шаблону. При использовании + выводится информация о сортировке (если применимо).
\dAp[+] [access-method-pattern [operator-family-pattern]]
Выводит функции, поддерживаемые семействами операторов. Если указан access-method-patter, то перечисляются только функции семейств операторов, связанных с методами доступа, имена которых соответствуют этому шаблону. Если указан operator-family-pattern, то перечисляются только функции семейств операторов, чьи имена соответствуют этому шаблону. При + выводит детальные сигнатуры функций.
\db[+] [pattern]
Выводит табличные пространства. Можно фильтровать по имени табличного пространства. При использовании + дополнительно выводит параметры, размер, права и описание.
\dc[S+] [pattern]
Выводит преобразования между кодировками.Можно фильтровать по имени преобразования. По умолчанию отображаются только объекты, созданные пользователем. Используйте + для отображения описания. Системные объекты выводятся при использовании S или шаблона.
\dconfig[+] [pattern]
Выводит текущие параметры конфигурации сервера. Можно фильтровать по имени параметра. Без аргументов — только параметры, отличающиеся от значений по умолчанию, + включает типы, контексты и права.
\dC[+] [pattern]
Выводит доступные преобразования типов. Можно фильтровать по исходным или целевым типам приведения. При использовании + дополнительно выводит описание.
\dd[S] [pattern]
Выводит описания объектов типа constraint, operator class, operator family, rule, и trigger. Все остальные комментарии могут быть просмотрены соответствующими командами для этих типов объектов.

\dd отображает описания для объектов, соответствующих pattern, или видимых объектов соответствующего типа, если аргумент не указан. Но в любом случае, перечислены только те объекты, которые имеют описание. По умолчанию отображаются только созданные пользователем объекты; предоставьте шаблон или арзумент S, чтобы включить системные объекты.

Описания объектов могут быть созданы с помощью команды COMMENT SQL.

\dD[S+] [pattern]
Выводит домены. Можно фильтровать по имени домена. По умолчанию отображаются только созданные пользователем объекты. Чтобы включить системные объекты, укажите шаблон или аргумент S. При использовании + отображает также разрешения и описание.
\ddp [pattern]
Выводит пользовательские настройки привилегий по умолчанию. Запись отображается для каждой роли (и схемы, если применимо), для которой настройки привилегий по умолчанию были изменены от встроенных значений по умолчанию. Можно фильтровать по имени роли или схемы.

Команда ALTER DEFAULT PRIVILEGES используется для установки привилегий доступа по умолчанию. Значение отображения привилегий объясняется в разделе «Привилегии».

\dE[S+] [pattern]
\di[S+] [pattern]
\dm[S+] [pattern]
\ds[S+] [pattern]
\dt[S+] [pattern]
\dv[S+] [pattern]
Отображает различные объекты базы данных. Буквы E, i, m, s, t, v обозначают соответственно:
  • E — внешние таблицы;
  • i — индексы;
  • m — материализованные представления;
  • s — последовательности;
  • t — таблицы;
  • v — представления.

Комбинируйте эти буквы в любой последовательности, чтобы отфильтровать нужные типы объектов. Например, команда \dti отобразит таблицы и индексы. Форма с + (например, \dt+, \dti+) добавляет к выводу информацию о типе хранения (постоянный, временный, неопределенный), размере и описании объекта. Если задан pattern, вывод ограничивается объектами, имена которых соответствуют шаблону. По умолчанию системные объекты скрыты, но их можно показать, указав шаблон или аргумент S.

\des[+] [pattern]
Выводит список внешних серверов. При использовании + выводятся также тип, версия, параметры, привилегии и описание сервера. Можно фильтровать по имени сервера.
\det[+] [pattern]
Выводит внешние таблицы. При наличии + выводятся дополнительные параметры и описание. Можно фильтровать по имени таблицы или схемы.
\deu[+] [pattern]
Выводит сопоставления пользователей для внешних серверов. Можно фильтровать по имени сопоставления. Используйте +, чтобы получить расширенную информацию, включая возможное отображение имени и пароля удаленного пользователя.
Осторожно

При использовании \deu+ будьте осторожны: могут отображаться чувствительные данные (например, пароли).

\dew[+] [pattern]
Выводит внешние обертки. Можно фильтровать по имени внешние обертки. При использовании + добавляется информация о правах доступа, параметрах и описании.
\df[anptwS+] [pattern [arg_pattern ... ]]
Выводит функции вместе с типами данных результатов, аргументами типов данных и типами функций, классифицируемыми как «agg» (агрегатная), «normal», (обычная), «procedure» (процедурная), «trigger» (триггерная) или «window» (оконная). Чтобы отобразить только функции определенных типов, добавьте соответствующие буквы a, n, p, t, или w к команде. Если указано pattern, отображаются только функции, имена которых соответствуют шаблону. Любые дополнительные аргументы являются образцами имен типов, которые сравниваются с именами типов первого, второго и так далее аргументов функции. Функции, совпадающие по шаблону, могут иметь больше аргументов, чем указали. Чтобы предотвратить это, укажите дефис - последним arg_pattern. По умолчанию отображаются только объекты, созданные пользователем, для включения системных объектов задайте шаблон или модификатор S. Если используется форма \df+, дополнительная информация о каждой функции отображается, включая изменчивость, безопасность параллельного выполнения, владельца, класс безопасности, права доступа, язык, внутреннее имя (только для функций на языке C и внутренних функций) и описание. Исходный код конкретной функции можно увидеть с помощью команды \sf.
\dF[+] [pattern]
Выводит конфигурации полнотекстового поиска. Можно фильтровать по имени конфигурации. При использовании + дополнительно показываются словари и анализатор для каждого типа токена.
\dFd[+] [pattern]
Выводит словари полнотекстового поиска. Можно фильтровать по имени словаря. Форма + добавляет расширенную информацию о каждом выбранном словаре, включая базовый шаблон полнотекстового поиска и значения параметров.
\dFp[+] [pattern]
Выводит список анализаторов полнотекстового поиска. Можно фильтровать по имени анализатора. При использовании + для каждого анализатора выводится полное описание, включая базовые функции и список распознаваемых типов токенов.
\dFt[+] [pattern]
Выводит список шаблонов полнотекстового поиска. Можно фильтровать по имени шаблона. При использовании + отображается дополнительная информация, включая названия базовых функций.
\dg[S+] [pattern]
Выводит список ролей базы данных. (Поскольку понятия «пользователей» и «групп» были объединены в понятие «ролей», эта команда теперь эквивалентна \du). По умолчанию отображаются только созданные пользователем объекты. Чтобы включить системные объекты, укажите шаблон или аргумент S. При использовании + о каждой роли будет представлена дополнительная информация, в настоящее время это добавляет комментарий к каждой роли.
\dl[+]
Выводит список больших объектов (эквивалентно \lo_list). Форма + выводит права доступа.
\dL[S+] [pattern]
Выводит список процедурных языков. Можно фильтровать по имени языка. По умолчанию отображаются только созданные пользователем объекты. Чтобы включить системные объекты, укажите шаблон или аргумент S. При использовании + каждый язык выводится с его обработчиком вызовов, валидатором, привилегиями доступа и указанием того, является ли он системным объектом.
\dn[S+] [pattern]
Выводит схемы (пространства имен). Можно фильтровать по имени схемы. По умолчанию отображаются только созданные пользователем объекты. Чтобы включить системные объекты, укажите шаблон или аргумент S. При использовании + каждый объект выводится со связанными с ним разрешениями и описанием, если таковое имеется.
\do[S+] [pattern [arg_pattern [arg_pattern] ] ]
Выводит список операторов с их аргументами и типами возвращаемых значений. Если указан только один arg_pattern, выводятся унарные операторы с соответствующим правым аргументом. Если указаны оба arg_pattern, выводятся бинарные операторы с совпадающими типами аргументов. Чтобы указать отсутствующий аргумент унарного оператора, используйте -. По умолчанию показываются только пользовательские объекты. Добавьте S или шаблон, чтобы включить системные. При использовании + отображается имя функции, реализующей оператор.
\dO[S+] [pattern]
Выводит сопоставления. Можно фильтровать по имени сопоставления. По умолчанию показываются только пользовательские объекты. Добавьте S или шаблон, чтобы включить системные. При использовании + каждое сопоставление выводится с соответствующим описанием, если оно есть.

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

\dp[S][pattern]
Выводит список таблиц, представлений и последовательностей с их связанными привилегиями доступа. Можно фильтровать по именам таблицы, представления и последовательности. По умолчанию показываются только объекты, созданные пользователями. Для включения системных объектов нужно задать шаблон или добавить модификатор S.

Команды GRANT и REVOKE используются для установки привилегий доступа. Значение отображения привилегий объясняется в разделе «Привилегии».

\dP[itn+] [pattern]
Выводит разделенные отношения: таблицы и индексы. Аргументы t и i фильтруют вывод по типу объекта. n добавляет информацию о родительских отношениях. + включает размеры разделов и описание. При использовании n+ показываются два размера: для прямых разделов и для всех вложенных.
\drds [role-pattern [database-pattern] ]
Выводит настройки конфигурации, заданные для ролей и/или баз данных. Можно фильтровать по именам ролей и баз данных. Без шаблонов или если указано *, выводятся все настройки, включая глобальные.

Команды ALTER ROLE и ALTER DATABASE используются для определения настроек конфигурации для каждой роли и базы данных.

\drg[S] [ pattern ]
Перечисляет информацию обо всех предоставленных членствах ролей, включая назначенные опции (ADMIN, INHERIT и/или SET) и праводателя.

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

\dRp[+] [pattern]
Выводит публикации репликации. Можно фильтровать по имени публикации. При использовании + также отображаются таблицы и схемы, связанные с каждой публикацией.
\dRs[+] [pattern]
Выводит список подписок репликации. Можно фильтровать по имени подписки. При использовании + отображаются дополнительные свойства подписок.
\dT[S+] [pattern]
Выводит список типов данных. Можно фильтровать по имени типа. При использовании + каждый тип выводится с его внутренним именем и размером, допустимыми значениями, если это тип enum, а также связанными разрешениями. По умолчанию показываются только пользовательские объекты. Добавьте S или шаблон, чтобы включить системные.
\du[S+] [pattern]
Выводит список ролей базы данных. (Поскольку понятия «пользователей» и «групп» были объединены в понятие «ролей», эта команда теперь эквивалентна \dg). По умолчанию показываются только пользовательские роли. Добавьте S или шаблон, чтобы включить системные. Можно фильтровать по имени роли. Если используется форма \du+, о каждой роли будет представлена дополнительная информация, в настоящее время это добавляет комментарий к каждой роли.
\dx[+] [pattern]
Выводит установленные расширения. Можно фильтровать по имени расширения. Если используется форма \dx+, перечисляются все объекты, принадлежащие каждому соответствующему расширению.
\dX [pattern]
Выводит расширенную статистику. Можно фильтровать по имени расширенной статистики.

Состояние каждого вида расширенной статистики показано в столбце с именем типа статистики (например, Ndistinct). defined означает, что он был запрошен при создании статистики, а NULL означает, что не было запрошено. Используйте представление pg_stats_ext для информации о запуске команды ANALYZE и доступе планировщика к статистике.

\dy[+] [pattern]
Выводит триггеры событий. Можно фильтровать по имени триггера событий. При использовании + каждый объект выводится вместе с его описанием.
\e
\edit [filename] [line_number]
Открывает редактор:
  • если указан filename — редактируется он;
  • если filename не указан — редактируется текущий буфер запроса;
  • если буфер пуст — копируется во временный файл последний выполненный запрос и редактируется;
  • после сохранения — содержимое анализируется как одна строка;
  • line_number указывает, на какой строке открыть редактор;
  • число без имени файла трактуется как номер строки.

Если редактируете файл или предыдущий запрос и выходите из редактора без внесения изменений, буфер запроса будет очищен. В противном случае обновленное содержимое буфера обрабатывается по обычным правилам psql: весь буфер рассматривается как единая строка. Все завершенные запросы (то есть те, которые оканчиваются точкой с запятой) немедленно выполняются и удаляются из буфера. Остальная часть буфера выводится обратно на экран. Чтобы отправить буфер на выполнение, введите точку с запятой или \g. Чтобы отменить и очистить буфер — используйте \r.

Обработка буфера как одной строки особенно важна для метакоманд: все, что идет после метакоманды, будет интерпретировано как ее аргументы, даже если это занимает несколько строк. Поэтому использовать метакоманды в многострочных сценариях через редактор не получится — для этого применяйте команду \i.

Если указан номер строки, psql откроет файл или буфер запроса с курсором на этой строке. Учтите, что если передан единственный числовой аргумент, он воспринимается как номер строки, а не как имя файла.

Совет

Как настроить редактор описано в разделе «Переменные окружения» ниже.

\echo text [ ... ]
Выводит переданные аргументы, обработанные как строки, на стандартный вывод, разделяя их пробелами и добавляя перевод строки. Это полезно, например, для вывода информации в скриптах. Например:
=> \echo `date`
Tue Oct 26 21:40:57 CEST 1999

Если первым аргументом указать -n без кавычек, то перевод строки в конце подавляется, и сам -n не выводится.

Совет

При использовании \o для перенаправления вывода команд, лучше применять \qecho, чтобы избежать путаницы. Ознакомьтесь также с \warn.

\ef [function_description [line_number]]
Открывает определение указанной функции или процедуры в редакторе в виде команды CREATE OR REPLACE FUNCTION или CREATE OR REPLACE PROCEDURE. Если редактор закрыт без сохранения — изменения игнорируются. При сохранении — команда выполняется, если завершена точкой с запятой, иначе возвращается для последующей отправки (;, \g) или отмены (\r).

Функцию можно указать по имени или по имени с типами аргументов (например, foo(integer, text)). Если ничего не указано — открывается шаблон CREATE FUNCTION. Указание строки позволяет установить курсор на определенную строку тела функции.

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

Совет

Как настроить редактор описано в разделе «Переменные окружения» ниже.

\encoding [encoding]
Задает кодировку клиента. При отсутствии аргументов отображается текущая кодировка.
\errverbose
Повторяет последнее сообщение об ошибке сервера с полной детализацией, как при включенных параметрах VERBOSITY = verbose и SHOW_CONTEXT = always.
\ev [view_name [line_number]]
Открывает определение представления в редакторе как команду CREATE OR REPLACE VIEW. Поведение аналогично \ef.

Если представление не указано — открывается шаблон CREATE VIEW. Редактирование выполняется так же, как для \edit. Если редактор закрыт без сохранения — изменения игнорируются. При сохранении — команда выполняется, если завершена точкой с запятой, иначе возвращается для последующей отправки (;, \g) или отмены (\r). Указание строки позволяет сразу перейти к нужной строке.

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

\f [string]
Устанавливает символ-разделитель между полями в нерегулярном (например, текстовом) выводе запроса. По умолчанию — вертикальная черта (|). Эквивалентно команде \pset fieldsep.
\g [(option=value [...])] [filename]
\g [(ption=value [...])] [ | command]
Отправляет текущий буфер запроса на выполнение. Параметры внутри скобок аналогичны \pset option value, но действуют только на текущий запрос. Пробелы вокруг = не допускаются, между парами option=value — обязательны. Если =value отсутствует, именованная option изменяется таким же образом, как и для \pset option без явного value.

Вывод можно перенаправить в файл filename или передать команде оболочки (| command). Это происходит только при успешном выполнении запроса с результатом ноль или более кортежей, а не если запрос завершается ошибкой или является командой SQL, которая не возвращает данные.

Если буфер пуст — повторно выполняется последний запрос. За исключением этого поведения, \g без аргументов практически эквивалентен точке с запятой. С аргументами \g предоставляет альтернативу «одноразовую» команду \o, а также позволяет одноразово корректировать параметры вывода, обычно устанавливаемые с помощью \pset.

Если указан |, оставшаяся часть строки интерпретируется буквально как команда command оболочки, и ни интерполяция переменных, ни расширение обратных кавычек в ней не выполняются. Остальная часть строки просто передается буквально оболочке.

\gdesc
Выводит описание результата текущего запроса — имена и типы столбцов — без его выполнения. При пустом буфере используется последний отправленный запрос. Синтаксические ошибки отображаются.
\getenv psql_var env_var
Присваивает переменной psql_var значение переменной окружения env_var. Если переменная окружения отсутствует, переменная psql_var остается без изменений. Пример:
=> \getenv home HOME
=> \echo :home
/home/postgres
\gexec
Выполняет текущий запрос, а затем интерпретирует каждый столбец каждой строки результата как отдельную SQL-команду и выполняет ее.

Создание индексов для всех столбцов таблицы my_table:

=> SELECT format('create index on my_table(%I)', attname)
-> FROM pg_attribute
-> WHERE attrelid = 'my_table'::regclass AND attnum > 0
-> ORDER BY attnum
-> \gexec
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX

Команды выполняются построчно и слева направо внутри каждой строки, если имеется более одного столбца. Поля NULL игнорируются. Метакоманды psql и переменные в этом режиме не поддерживаются. Ошибки в отдельных командах не останавливают выполнение остальных (если не включен параметр ON_ERROR_STOP).

Выполнение каждого запроса подлежит обработке ECHO. Рекомендуется установить ECHO = all или queries для наглядности. Регистрация запросов, пошаговый режим, тайминг и другие функции выполнения запросов также применяются к каждому сгенерированному запросу.

Если буфер запроса пуст — повторно выполняется последний запрос.

\gset [prefix]
Выполняет текущий запрос и сохраняет результат (одну строку) в переменные psql. Подробнее описано в разделе «Переменные» ниже. Каждый столбец строки сохраняется в переменную с именем, совпадающим с именем столбца. Например:
=> SELECT 'hello' AS var1, 10 AS var2
-> \gset
=> \echo :var1 :var2
-- вывод hello 10

Если указан prefix, он добавляется к имени каждой переменной:

=> SELECT 'hello' AS var1, 10 AS var2
-> \gset result_
=> \echo :result_var1 :result_var2
-- вывод hello 10

Если значение столбца — NULL, переменная не устанавливается и, если была, сбрасывается. При отсутствии результата или ошибке выполнения запроса переменные не изменяются. Если буфер запроса пуст, повторно используется последний отправленный запрос.

\gx [(option=value [...])] [filename]
\gx [(option=value [...])] [ |command]
Работает аналогично \g, но вывод выполняется в расширенном режиме независимо от текущих настроек (аналогично указанному expanded=on в списке параметров \pset, подробнее в описании \x).
\h
\help [command]
Отображает синтаксическую справку по указанной SQL-команде. Если команда не указана — выводится список всех команд, по которым доступна справка. Если задан *, отображается помощь по всем командам.

Вся оставшаяся часть строки всегда принимается за аргументы \help, и ни интерполяция переменных, ни расширение обратных кавычек не выполняются в аргументах. Команды из нескольких слов можно указывать без кавычек, например \help alter table.

\H
\html
Переключает вывод в формат HTML. Повторный вызов возвращает формат к обычному выровненному тексту. Используется для совместимости и формирования вывода в виде HTML-таблицы. С управлением форматами вывода можно ознакомиться в описании команды \pset.
\i
\include filename
Загружает и выполняет команды из указанного файла filename, как если бы они были введены вручную. Если указан - вместо имени файла filename, ввод читается со стандартного потока до достижения EOF или команды \q. Используется для чередования интерактивного ввода с вводом из файлов. Обратите внимание, что поведение Readline будет использоваться только в том случае, если оно активно на внешнем уровне.
примечание

Для отображения строк по мере выполнения можно установить переменную ECHO в значение all.

\if expression
\elif expression
\else
\endif
Реализуют вложенные условные блоки. Условный блок начинается с \if и заканчивается \endif. Можно использовать любое количество \elif и один \else. Обычные запросы и другие типы команд с обратной косой чертой могут (и обычно появляются) между командами, образующими условный блок.

Команды \if и \elif читают свой аргументы и оценивают их как логическое выражение. Если выражение дает true, то обработка продолжается нормально; в противном случае пропускаются строки до тех пор, пока не будет достигнут соответствующий \elif, \else или \endif. Как только тест \if или \elif прошел успешно, аргументы последующих команд \elif в том же блоке не оцениваются, а рассматриваются как ложные. Строки после \else обрабатываются только в том случае, если ни один из предыдущих соответствующих тестов \if или \elif не был успешным.

Аргумент expression команды \if или \elif подлежит интерполяции переменных и расширению обратных кавычек, так же как любой другой аргумент команды с обратной косой чертой. После этого он оценивается так же, как значение переменной опции включения/выключения. Таким образом, допустимым значением является любое однозначное нечувствительное к регистру совпадение для одного из следующих значений: true, false, 1, 0, on, off, yes, no. Например, t, T и tR будут рассматриваться как true.

Если выражение не может быть интерпретировано как логическое — выводится предупреждение и оно считается ложным.

Пропускаемые строки анализируются нормально для идентификации запросов и команд с обратной косой чертой, но запросы не отправляются на сервер, а команды с обратной косой чертой, отличные от условных (\if, \elif, \else, \endif), игнорируются. Условные команды проверяются только на допустимое вложение. Ссылки на переменные в пропущенных строках не расширяются, и расширение обратных кавычек также не выполняется.

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

Пример:

-- проверка существования двух отдельных записей в базе данных и сохранение
-- результатов в двух разных переменных psql
SELECT
EXISTS(SELECT 1 FROM customer WHERE customer_id = 123) as is_customer,
EXISTS(SELECT 1 FROM employee WHERE employee_id = 456) as is_employee
\gset
\if :is_customer
SELECT * FROM customer WHERE customer_id = 123;
\elif :is_employee
\echo 'is not a customer but is an employee'
SELECT * FROM employee WHERE employee_id = 456;
\else
\if yes
\echo 'not a customer or employee'
\else
\echo 'this will never print'
\endif
\endif
\ir
\include_relative
Включает другие SQL-скрипты, альтернатива команде \i. В интерактивном режиме работает так же, как \i. Однако при запуске из скрипта \ir интерпретирует путь к файлу относительно расположения самого скрипта, а не текущего рабочего каталога.
\l[+]
\list[+] [pattern]
Выводит список всех баз данных на сервере: имя, владелец, кодировка и доступные привилегии. Можно фильтровать по имени базы данных. При использовании + дополнительно отображаются размер, табличное пространство по умолчанию и описание (отображается только для баз, к которым пользователь может подключиться).
\lo_export loid filename
Сохраняет большой объект с заданным OID (loid) в файл filename на стороне клиента. Немного отличается от серверной функции lo_export, которая работает от имени пользователя сервера и с файловой системой сервера.

::: tipA Совет Используйте \lo_list, чтобы определить OID нужного большого объекта. :::

\lo_import filename [comment]
Загружает файл в виде большого объекта в базу данных. Можно также указать комментарий, который будет привязан к объекту. Пример:
foo=> \lo_import '/home/peter/pictures/photo.xcf' 'a picture of me'
lo_import 152801

Результатом является OID нового объекта (например, 152801), который можно использовать для доступа к недавно созданному большому объекту в будущем. Рекомендуется добавлять комментарии для удобства идентификации. Информацию об OID и комментариях можно получить через \lo_list.

Обратите внимание: команда работает от имени локального пользователя и с его файловой системой (в отличие от серверной версии lo_import).

\lo_list[+]
Выводит список всех больших объектов, хранящихся в текущей базе данных вместе с комментариями. При использовании + дополнительно отображаются права доступа к каждому объекту.
\lo_unlink loid
Удаляет из базы данных большой объект с указанным OID loid.
Совет

Для поиска нужного OID используйте \lo_list.

\o
\out [filename]
\o
\out [ |command]
Перенаправляет вывод последующих запросов в файл filename или в команду оболочки command (если путь начинается с |). Если аргумент не указан, вывод снова направляется в стандартный поток.

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

Результат запроса включает все таблицы, ответы команд и уведомления, полученные от сервера баз данных, а также вывод различных команд с обратной косой чертой, которые запрашивают базу данных (например, \d); но не сообщения об ошибках.

::: tip Совет

Для чередования вывода и текста используйте \qecho. :::

\p
\print
Выводит текущий буфер запроса на экран. Если буфер пуст, отображается последний выполненный запрос.
\password [username]
Позволяет сменить пароль пользователя (по умолчанию — текущего). Новый пароль запрашивается, шифруется и передается на сервер с помощью команды ALTER ROLE. Это защищает его от попадания в лог или историю команд.
\prompt [text] name
Запрашивает у пользователя ввод и сохраняет его в переменную name. Можно указать текст подсказки text (для многословных подсказок заключите текст в одинарные кавычки.)

По умолчанию, \prompt использует терминал для ввода и вывода. Однако, если используется переключатель командной строки -f, \prompt использует стандартный ввод и стандартный вывод.

\pset [option [value]]
настраивает параметры, влияющие на форматирование вывода результатов запросов в psql. Указывается параметр option, который необходимо изменить, и, при необходимости, его значение value. Если value не указано, поведение зависит от параметра: оно может переключать его состояние, сбрасывать в значение по умолчанию или просто отображать текущую настройку.

Вызов \pset без аргументов показывает текущее состояние всех параметров форматирования вывода.

Доступные параметры:

border : Устанавливает толщину рамок таблицы, принимает числовое значение. Как правило, чем выше значение, тем больше рамок и линий отображается в таблице. В формате HTML оно напрямую устанавливается как border=.... В остальных форматах имеют смысл только значения 0 (без рамок), 1 (внутренние линии) и 2 (внешняя рамка). Значения выше 2 трактуются как 2. В форматах latex и latex-longtable также допустимо значение 3, при котором добавляются горизонтальные линии между строками.

columns : Устанавливает ширину вывода в формате wrapped. Также влияет на определение того, стоит ли использовать постраничную разбивку или вертикальный режим отображения (expanded auto). Значение 0 (по умолчанию) означает, что ширина будет определяться из переменной окружения COLUMNS или автоматически по ширине экрана. если columns равен нулю, то формат wrapped влияет только на вывод на экран. При ненулевом значении ширина применяется ко всем видам вывода, включая файлы и каналы.

csv_fieldsep : Устанавливает символ-разделитель для формата CSV. Если указанный символ встречается в значении поля, оно заключается в кавычки в соответствии со стандартом CSV. По умолчанию используется запятая.

expanded
x : Устанавливает вертикальный формат вывода. Значение должно быть on, off или auto. Без значения переключает режим. При значении on результат отображается в двух столбцах, с именем столбца слева и данными справа. Этот режим полезен, если данные не помещаются на экране в горизонтальном режиме. В режиме auto расширенный режим используется всякий раз, когда вывод запроса содержит более одного столбца и шире экрана, иначе используется обычный режим. Автоматический режим эффективен только в форматах выравнивания и обертки.

fieldsep : Определяет разделитель полей в неформатированном (unaligned) выводе. Например, \pset fieldsep '\t' установит табуляцию в качестве разделителя. По умолчанию используется вертикальная черта (|).

fieldsep_zero : Устанавливает нулевой байт в качестве разделителя полей в unaligned формате.

footer : Определяет отображение нижнего колонтитула (n rows). Принимает значения on — включен, off — выключен. Без значения — переключает текущее состояние.

format : Определяет формат вывода. Допускаются уникальные сокращения.

Возможные значения:

  • aligned — читаемый, отформатированный текст (по умолчанию).
  • unaligned — записывает все значения строки в одну строку, разделяя их текущим символом-разделителем полей. Этот режим удобен для вывода, предназначенного для последующей обработки другими программами, особенно при использовании табуляции или запятых в качестве разделителей. Однако следует учитывать, что символ-разделитель не экранируется, если он встречается внутри значения. В таких случаях предпочтительнее использовать формат csv.
  • csv — выводит значения столбцов, разделенные запятыми, с применением правил экранирования, определенных в RFC 4180. Этот вывод совместим с CSV-форматом команды COPY на стороне сервера. Если включен режим tuples_only, psql также добавляет строку с именами столбцов в начале. Заголовки таблиц и нижние колонтитулы в этом формате не выводятся. Каждая строка завершается символом конца строки, зависящим от операционной системы: это может быть \n (на Unix-подобных системах) или \r\n (на Windows). При необходимости можно изменить символ-разделитель с помощью \pset csv_fieldsep.
  • wrapped — автоматически переносит длинные значения столбцов на новую строку, чтобы они помещались в заданную ширину колонки. Целевая ширина определяется аналогично параметру columns. При этом имена столбцов не переносятся — если они слишком длинные, вывод работает так же, как и в формате aligned.

Форматы asciidoc, html, latex, latex-longtable и troff-ms выводят таблицы, которые предназначены для включения в документы с помощью соответствующего языка разметки. Не являются полноценными документами. Это может быть не критично для HTML, но для LaTeX обязателен документ-контейнер. Формат latex использует среду LaTeX tabular, а формат latex-longtable требует наличия пакетов longtable и booktabs.

linestyle
Определяет стиль отображения границ таблицы. Можно использовать уникальные сокращения (например, a вместо ascii). Значение по умолчанию — ascii. Эта настройка применяется только к форматам вывода aligned и wrapped.

Допустимые значения:

  • ascii — использует стандартные ASCII-символы. Переносы строк в ячейках отображаются символом + в правой границе таблицы. Если значение не содержит символа новой строки, но все же переносится на следующую строку, отображается точка. в правой границе первой строки и снова в левой границе следующей.
  • old-ascii — использует ASCII-символы, но в старом стиле (до версии 8.4 PostgreSQL). Переносы строк показываются вертикальной чертой | вместо обычного левого разделителя.
  • unicode — использует Unicode-символы для рисования рамок. Перенос строки внутри ячейки отмечается символом возврата каретки в правой границе. Если переносится без символа новой строки, в правой границе первой строки отображается многоточие, а в левой границе следующей — снова соответствующий символ.

Если в настройке терминала указана ширина (через \pset columns), стиль linestyle также влияет на отображаемые символы рамок. ASCII подойдет везде, но Unicode выглядит более эстетично, если поддерживается терминалом.

null
Определяет, какая строка будет выведена вместо значения NULL. По умолчанию — ничего (то есть пустая строка), что может быть неотличимо от настоящей пустой строки. Например, для явного указания можно задать \pset null '(NULL)'.

numericlocale : Включает или отключает отображение чисел с учетом локали (например, разделителей тысяч). Допустимые значения: on, off. Без значения — переключает текущий режим.

pager : Управляет использованием постраничного вывода. \pset pager без value включает и выключает использование постраничного вывода.

Допустимые значения:

  • off — отключает постраничный вывод;
  • on — включает его, если вывод идет в терминал и превышает размер экрана;
  • always — включает постраничный вывод независимо от длины вывода.

Если заданы переменные окружения PSQL_PAGER или PAGER, используется указанная в них программа. Иначе — стандартная для платформы, например more.

Для команды \watch используется переменная окружения PSQL_WATCH_PAGER для поиска программы постраничной разбивки в системах Unix. Это настроено отдельно, потому что это может сбить с толку традиционные программы постраничной разбивки, но его можно использовать для отправки вывода инструментам, которые понимают формат вывода psql (таким как pspg --stream).

pager_min_lines
Определяет минимальное количество строк для активации pager. Если задано значение больше высоты экрана, постраничный вывод не активируется, пока результат не превысит указанное число строк. По умолчанию — 0.

recordsep : Задает символ или строку-разделитель между записями (строками) в формате unaligned. По умолчанию — символ новой строки (\n).

recordsep_zero : Устанавливает разделитель записей в формате unaligned как нулевой байт.

tableattr (или T) : Задает атрибуты таблицы HTML или ширина столбцов в LaTeX.

В формате HTML задает атрибуты HTML-тега <table>, например: cellpadding, bgcolor. Атрибут border настраивается через \pset border.

В формате latex-longtable управляет пропорциональной шириной столбцов, например: '0.2 0.3 0.5'. Для неуказанных столбцов используется последнее значение из списка.

title
C
Задает заголовок для таблиц в выводе, например, описание запроса. Если значение не указано, заголовок сбрасывается. Можно использовать для того, чтобы дать результатам описательные метки.

tuples_only
t : Включает (on) или отключает (off) режим «только кортежи» (без заголовков и колонтитулов). Без значения команда переключается между обычным и выводом только кортежей. Обычный вывод включает дополнительную информацию, такую как заголовки столбцов, названия и различные колонтитулы. В режиме только кортежей отображаются только фактические данные таблицы.

unicode_border_linestyle : Устанавливает стиль внешней границы при использовании unicode. Допустимые значения — single или double.

unicode_column_linestyle : Устанавливает стиль линий, разделяющих столбцы при использовании unicode. Допустимые значения — single или double.

unicode_header_linestyle : Устанавливает стиль границ заголовков таблицы при использовании unicode. Допустимые значения — single или double.

xheader_width : Устанавливает максимальную ширину заголовка расширенного вывода равной одной из следующих величин: full (значение по умолчанию), column, page или integer value.

  • full – расширенный заголовок не усекается и будет такой же ширины, как самая широкая строка вывода.
  • column – усечь строку заголовка до ширины первого столбца.
  • page – усечь строку заголовка до ширины терминала.
  • integer value – указать точную максимальную ширину строки заголовка.

Примеры того, как выглядят эти разные форматы, можно увидеть в разделе «Примеры» ниже.

Совет

Для удобства можно использовать сокращенные команды \pset: \a, \C, \f, \H, \t, \T, \x — соответствуют часто используемым параметрам.

\q
\quit
Завершает сеанс psql. При использовании в скрипте — завершает только его выполнение.
\qecho text [ ... ]
Идентична команде \echo, но вывод направляется в текущий канал вывода запроса, установленный командой \o.
\r
\reset
Очищает текущий буфер запросов.
\s [filename]
Выводит историю команд psql. Если указан filename, записывает историю в файл. Иначе выводит ее на стандартный вывод, используя постраничный вывод при необходимости. Доступно только при наличии поддержки Readline.
\set [name [value [...]]]
Создает или изменяет переменную psql name. Если указано несколько value, они объединяются. Без значений переменная становится пустой. Чтобы сбросить переменную, используйте команду \unset.

Вызов \set без аргументов отображает все текущие переменные и их значения. Имена переменных чувствительны к регистру и могут содержать буквы, цифры и подчеркивания. Подробнее об этом в разделе «Переменные» ниже.

Некоторые переменные являются особыми, поскольку они управляют поведением psql или автоматически устанавливаются для отражения состояния соединения. Эти переменные описаны в «Переменные» ниже.

примечание

Эта команда не связана с SQL-командой SET.

\setenv name [value]
Устанавливает или удаляет переменную окружения name на value. Если value не указан, переменная удаляется. Пример:
testdb=> \setenv PAGER less
testdb=> \setenv LESS -imx4F
\sf[+] function_description
Выводит определение указанной функции или процедуры в виде команды CREATE OR REPLACE FUNCTION или CREATE OR REPLACE PROCEDURE. Определение выводится на текущий канал вывода запроса, установленный командой \o.

Можно указать имя и типы аргументов, например foo(integer, text). Типы аргументов должны быть указаны, если существует более одной функции с тем же именем. При использовании + строки будут пронумерованы.

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

\sv[+] view_name
Показывает определение представления как CREATE OR REPLACE VIEW. Определение выводится на текущий канал вывода запроса, установленный командой \o. При использовании + строки нумеруются начиная с 1.

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

\t
Включает или отключает вывод заголовков и итогов (количества строк). Эквивалентно \pset tuples_only.
\T table_options
Устанавливает атрибуты HTML-тега <table> при выводе в HTML-формате. Аналог \pset tableattr.
\timing [on | off]
Включает или выключает отображение времени выполнения SQL-команд. Без аргумента — переключает текущее состояние. Время показывается в миллисекундах или в формате дни:часы:минуты:секунды.
\unset name
Удаляет переменную psql. Некоторые переменные нельзя полностью удалить, и команда приводит к их сбросу на значения по умолчанию. Подробнее об жтом описано в разделе «Переменные» ниже.
\w
\write filename
\w
\write | command
Сохраняет буфер текущего запроса в файл filename, или — если указано |command — передает его команде оболочки. Если буфер пуст, используется последний выполненный запрос.

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

\warn text [ ... ]
Идентична команде \echo, но вывод идет в stderr (канал ошибок), а не stdout.
\watch [ i[nterval]=seconds ] [ c[ount]=times ] [ m[in_rows]=rows ] [ seconds ]
Неоднократно выполняет текущий буфер запросов (так же, как это делает \g) до прерывания, неудачи выполнения запроса, достижения указанного предела количества исполнений или пока запрос больше не возвращает минимальное число строк. Ожидает указанное количество секунд (по умолчанию 2) между выполнениями. Для совместимости с предыдущими версиями seconds можно указать с префиксом interval= или без него. Каждый результат запроса отображается с заголовком, который включает строку \pset title (если она имеется), время начала запроса и интервал задержки.

Если текущий буфер запросов пуст, повторно выполняется последний отправленный запрос.

\x [ on | off | auto]
Устанавливает или переключает режим расширенного отображения таблиц. То же, что \pset expanded.
\z[S] [pattern]
Показывает таблицы, представления и последовательности вместе с правами доступа. Можно фильтровать по именам таблицы, представления и последовательности. По умолчанию показываются только объекты, созданные пользователями. Для включения системных объектов нужно задать шаблон или добавить модификатор S.

Аналогична команде \dp.

\! [command]
Без аргументов запускает подчиненную оболочку, когда эта оболочка завершается, psql продолжает работу. С аргументом — выполняет указанную команду оболочки. Аргументы не интерполируются и передаются как есть.

Без аргумента, выходит в под-шелл; psql возобновляется при выходе из под-шелла. С аргументом выполняет команду оболочки command.

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

\? [topic]
Выводит справку по psql. Возможные значения topic:
  • commands — описание метакоманд;
  • options — параметры командной строки;
  • variables — переменные конфигурации.
\;
Комбинация обратной косой черты и точки с запятой (\;) не является полноценной метакомандой, как предыдущие команды. Ее функция — вставить точку с запятой в буфер запроса без немедленной отправки запроса серверу.

В обычной ситуации psql отправляет SQL-команду на сервер сразу после первой встреченной точки с запятой, даже если в строке есть другие команды. Например:

 select 1; select 2; select 3;

Это приведет к последовательной отправке трех отдельных SQL-команд и отображению их результатов поочередно.

В отличие от этого, если использовать \;, например:

select 1\; select 2\; select 3;

то psql рассматривает все как один составной запрос и отправляет его на сервер целиком. Такой запрос выполняется как одно выражение, возможно, в пределах одной транзакции, если не указано иное через BEGIN/COMMIT. Подробнее об этом описано в разделе «Несколько операторов в простом запросе»

Шаблоны

Многие метакоманды принимают шаблон (pattern) для указания имен объектов.

Простой шаблон — это точное имя объекта, например mytable. По умолчанию все символы в шаблоне приводятся к нижнему регистру, как в SQL. Чтобы избежать этого, заключите имя в двойные кавычки: "MyTable".

Для включения символа двойной кавычки в шаблон используются два символа двойных кавычек подряд внутри шаблона в двойных кавычках, что соответствует правилам для идентификаторов SQL в кавычках. Например \dt "FOO""BAR" будет выводить таблицу с именем FOO"BAR (но не foo"bar). Допускается частичное заключение шаблона в кавычки: например, my"Table".

Если шаблон опущен, команда отображает все видимые объекты в текущем пути поиска схем. Это то же самое, что задать шаблон *. Чтобы отобразить все объекты в базе, независимо от видимости — используйте шаблон *.*.

Символ * в шаблоне означает «любое количество любых символов», а ? — «один любой символ», как в Unix-оболочках. Например, foo* отобразит объекты, начинающиеся на foo. Однако в двойных кавычках символы * и ? теряют специальное значение.

Шаблон отношения, содержащий точку (.) интерпретируется как шаблон имени схемы, за которым следует шаблон имени объекта: schema.object. Например, foo*.*bar* покажет объекты, содержащие bar в имени и находящиеся в схемах, начинающихся на foo.

Шаблон схемы, содержащий точку (.) интерпретируется как имя базы данных, за которым следует шаблон имени схемы: database.schema.object. Например, \dn mydb.*foo* отображает все схемы, имена которых содержат foo. Часть имени базы данных не будет обрабатываться как шаблон и должна соответствовать имени текущей подключенной базы данных, иначе возникнет ошибка.

Точка внутри двойных кавычек (".") воспринимается буквально, а не как разделитель. Когда точки нет — шаблон соответствует только объектам, видимым в текущем пути поиска схемы.

Шаблон отношения, который содержит две точки интерпретируется как имя базы данных, за которым следует шаблон имени схемы, а затем шаблон имени объекта. Часть имени базы данных не будет обрабатываться как шаблон и должна соответствовать имени текущей подключенной базы данных, иначе возникнет ошибка.

Можно применять синтаксис, похожий на регулярные выражения, в шаблонах метакоманд. Например, [0-9] — соответствует любой цифре.

Однако шаблоны psql интерпретируют некоторые символы иначе, чем обычные POSIX-совместимые регулярные выражения:

  • . используется как разделитель между частями имени (schema.object), а не как любой символ.-;
  • * превращается в .*;
  • ? превращается в .;
  • $ соответствует буквально символу $, а не концу строки.

Если нужно использовать эти символы как в стандартных регулярных выражениях, их можно имитировать вручную:

  • .?
  • R*(R+|)
  • R?(R|)

Кроме того, $не требуется использовать как якорь конца строки — psql автоматически считает, что шаблон должен полностью соответствовать имени.

Чтобы избежать жесткого сопоставления с началом и концом, оберните шаблон в *, например, *log*.

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

В шаблонах для аргументов (\do) спецсимволы всегда воспринимаются буквально, даже вне кавычек.

Расширенные функции

Переменные

psql предоставляет механизм подстановки переменных, аналогичный переменным в командных оболочках Unix. Переменные представляют собой пары имя/значение, где значением может быть произвольная строка любой длины. Имя переменной может включать буквы (включая нелатинские), цифры и символы подчеркивания.

Для задания переменной используется метакоманда \set, например:

testdb=> \set foo bar

устанавливает переменную foo со значением bar.

Для обращения к значению переменной используется двоеточие перед ее именем, например:

testdb=> \echo :foo
-- вывод: bar

Подстановка значений переменных поддерживается как в командах SQL, так и в метакомандах psql. Подробнее описано в разделе «Интерполяция SQL».

Вызов команды \set без второго аргумента устанавливает значение переменной как пустую строку. Для удаления переменной используется команда \unset. Это приводит к полному удалению переменной из текущего окружения psql. Вызов \set без аргументов выводит список всех текущих переменных и их значений.

примечание

Аргументы команды \set подлежат той же подстановке, что и другие команды. Это позволяет создавать цепочки зависимых значений, например: \set :foo 'something' — аналог переменных переменных в языках вроде Perl или PHP. Хотя такие конструкции допустимы, они редко оказываются практически полезными. Вместе с тем, следующая запись: \set bar :foo является абсолютно допустимым способом копирования переменной.

Некоторые переменные в psql обрабатываются особым образом и управляют поведением клиента. Эти переменные либо представляют изменяемые параметры настройки, либо внутреннее состояние psql.

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

Если значение управляющей переменной недопустимо, psql игнорирует попытку установки. Команда \unset в этом случае интерпретируется как возврат к значению по умолчанию. Команда \set без второго аргумента устанавливает значение on для переменных, поддерживающих этот формат, и отклоняется для всех остальных.

Переменные, принимающие логические значения, также распознают распространенные синонимы: on, off, true, false и другие.

Ниже перечислены переменные, значения которых psql обрабатывает особым образом:

AUTOCOMMIT
Определяет поведение автоматического подтверждения транзакций. При значении on (по умолчанию) каждая SQL-команда фиксируется автоматически после успешного выполнения. Для ручного управления транзакциями необходимо использовать BEGIN или START TRANSACTION. При значении off фиксирование выполняется только при явном вызове COMMIT или END. В этом режиме psql автоматически добавляет BEGIN перед первой командой в блоке транзакций, если команда допускает выполнение внутри транзакции.

::: note Примечание

В режиме off завершение неудавшейся транзакции требует явного вызова ABORT или ROLLBACK. При выходе из сеанса без подтверждения транзакции все изменения будут потеряны. :::

::: note Примечание

Включенный режим autocommit=on является традиционным для PostgreSQL, а выключенный режим ближе к спецификации SQL. При необходимости предпочтительный режим можно указать в psqlrc или ~/.psqlrc. :::

COMP_KEYWORD_CASE
Управляет регистром символов для автодополнения SQL-ключевых слов. Поддерживаемые значения:
  • lower — слова приводятся к нижнему регистру;
  • upper — к верхнему регистру;
  • preserve-lower (по умолчанию) — регистр сохраняется, если введена часть слова, иначе используется нижний;
  • preserve-upper — аналогично, но используется верхний регистр.
DBNAME
Содержит имя текущей базы данных. Значение автоматически устанавливается при подключении, но может быть изменено или сброшено вручную.
ECHO
Определяет, какие строки ввода отображаются на стандартный вывод:
  • all — все непустые строки (относится к строкам, читаемым интерактивно);
  • queries — только SQL-запросы по мере их отправки на сервер;
  • errors — только неудачные запросы;
  • none (по умолчанию) — ничего не отображается.

Опции можно задать и через параметры командной строки (-a, -e, -b соответственно).

ECHO_HIDDEN
Включает отображение SQL-запросов, скрытых за командами обратной косой черты. При значении on запрос отображается перед выполнением, noexec — отображается, но не выполняется, off (по умолчанию) — отключено. Эквивалентна параметру -E.
ENCODING
Содержит текущую кодировку клиента.набора символов клиента. Она устанавливается каждый раз при подключении к базе данных (включая запуск программы) и при изменении кодировки с помощью \encoding, но ее можно изменить или сбросить.
ERROR
Содержит true, если последний SQL-запрос завершился с ошибкой, иначе — false.
FETCH_COUNT
Задает количество строк, извлекаемых и отображаемых за одну итерацию при выполнении запросов SELECT (стандартное поведение — весь результат собирается перед отображением). При значении больше нуля результат отображается частями, что позволяет экономить память при больших объемах данных. При использовании этой функции запрос может завершиться сбоем после того, как уже были отображены некоторые строки.

::: tipA Совет

Рекомендуется использовать вывод в формате, отличном от aligned, поскольку последний плохо работает с постраничной выдачей — ширина столбцов может отличаться между группами строк. :::

Если для этой переменной установлено целое значение больше нуля, результаты запросов SELECT извлекаются и отображаются группами из такого количества строк, а не стандартное поведение, при котором весь результат собирается перед отображением. Таким образом, используется только ограниченное количество памяти независимо от размера результирующего набора. Значения от 100 до 1000 обычно используются при включении этой функции. Помните, что при использовании этой функции запрос может завершиться сбоем после того, как уже были отображены некоторые строки.

HIDE_TABLEAM
Скрывает информацию о методе доступа таблиц при значении true. Используется преимущественно для регрессионного тестирования.
HIDE_TOAST_COMPRESSION
Исключает информацию о методе сжатия TOAST-колонок из вывода при значении true. Используется преимущественно для регрессионного тестирования.
HISTCONTROL
Определяет правила включения строк в историю команд:
  • ignorespace — игнорируются строки, начинающиеся с пробела;
  • ignoredups — игнорируются повторяющиеся строки;
  • ignoreboth — оба вышеуказанных правила;
  • none (по умолчанию) — сохраняются все команды.
HISTFILE
Указывает имя файла для хранения истории. При отсутствии значения используется PSQL_HISTORY или путь по умолчанию (~/.psql_history на Unix, %APPDATA%\postgresql\psql_history в Windows).

Можно настроить ведение отдельной истории для каждой базы данных, например:

\set HISTFILE ~/.psql_history-:DBNAME

Размещение в ~/.psqlrc приведет к тому, что psql будет поддерживать отдельную историю для каждой базы данных.

HISTSIZE
Ограничивает количество записей в истории команд (по умолчанию 500). Отрицательное значение отменяет ограничение.
HOST
Содержит имя или IP-адрес текущего хоста базы данных. Значение обновляется при подключении, но может быть изменено или сброшено.
IGNOREEOF
Определяет, сколько раз нужно ввести символ EOF (обычно Ctrl+D), чтобы завершить интерактивную сессию:
  • 0 или 1 (по умолчанию) — завершение по одному нажатию;
  • >1 — требуется соответствующее число повторов;
  • нечисловое значение интерпретируется как 10.
LASTOID
Содержит значение OID, возвращенное последней командой INSERT или \lo_import. Обновляется только до следующей SQL-команды. В PostgreSQL 12 и выше больше не поддерживаются системные столбцы OID и значение всегда будет 0.
LAST_ERROR_MESSAGE
LAST_ERROR_SQLSTATE
Содержат текст последней ошибки и ее SQLSTATE-код. Если ошибок не было — пустая строка и 00000.
ON_ERROR_ROLLBACK
Управляет поведением в случае ошибки в транзакции:
  • off (по умолчанию) — ошибка прерывает транзакцию;
  • on — продолжается с откатом до точки сохранения;
  • interactive — откат выполняется только в интерактивном режиме.

Механизм реализуется с помощью автоматического SAVEPOINT перед каждой командой.

ON_ERROR_STOP
По умолчанию обработка команд продолжается после возникновения ошибки. При значении on этой переменной выполнение команд прекращается немедленно после ошибки. В интерактивном режиме psql вернется к подсказке командной строки, в противном случае psql завершит работу, вернув код ошибки 3, чтобы отличить этот случай от фатальных условий ошибки, которые сообщаются с использованием кода ошибки 1. В любом случае любые текущие сценарии (основной сценарий, если он есть, и любые другие сценарии, которые он мог вызвать) будут немедленно прекращены. Если команда строки содержит несколько SQL-команд, выполнение остановится на текущей.
PORT
Показывает порт сервера баз данных, к которому установлено текущее подключение. Значение автоматически задается при каждом подключении, включая запуск psql, но может быть изменено или сброшено.
PROMPT1
PROMPT2
PROMPT3
Определяют формат строк подсказки командной строки в psql. Подробнее описано в разделе «Подсказки» ниже.
QUIET
Эквивалентна параметру командной строки -q. Вероятно, это не слишком полезно в интерактивном режиме.
ROW_COUNT
Содержит количество строк, возвращенных или затронутых последним SQL-запросом. При ошибке или отсутствии значения — 0.
SERVER_VERSION_NAME
SERVER_VERSION_NUM
Выводит версию сервера PostgreSQL, к которому подключен psql. Первая переменная содержит строковое значение (например, 14.2, 15beta1), вторая — числовое (например, 140002, 150001). Значения обновляются при каждом подключении, но их можно переопределить или сбросить.
SHELL_ERROR
true, если последняя оболочка завершилась неудачей, false, если успешно. Это относится к командам оболочки, вызванным посредством мета-команд \!, \g, \o, \w, \copy, а также расширения обратных кавычек (`). Обратите внимание, что для \o данная переменная обновляется, когда следующая команда \o закрывает выходной канал.
SHELL_EXIT_CODE
Код завершения последней команды оболочки. Числа от 0 до 127 представляют коды выхода программ, числа от 128 до 255 указывают на завершение сигнала, а -1 означает невозможность запуска программы или получения ее кода завершения. Это применимо к командам оболочки, вызваным посредством мета-команд \!, \g, \o, \w, \copy, а также расширения обратных кавычек (`). Обратите внимание, что для \o данная переменная обновляется, когда следующая команда \o закрывает выходной канал.
SHOW_ALL_RESULTS
Управляет отображением результатов при выполнении нескольких SQL-запросов за один раз. Если установлено значение off, показывается только последний результат. По умолчанию — on.
SHOW_CONTEXT
Определяет, когда отображать поле CONTEXT в сообщениях об ошибках сервера.

Возможные значения:

  • never — никогда не отображать;
  • errors (по умолчанию) — показывать только при ошибках;
  • always — всегда отображать.

Не имеет эффекта при установке VERBOSITY на terse или sqlstate. Подробная версия этой ошибки описана в \errverbose.

SINGLELINE
Установка этой переменной на on эквивалентна параметру командной строки -S.
SINGLESTEP
Установка этой переменной на on эквивалентна параметру командной строки -s.
SQLSTATE
Код состояния SQL, связанный с последним SQL-запросом. При успешном выполнении — 00000. Возможные значения описаны в «приложении А. Коды ошибок PostgreSQL».
USER
Показывает имя пользователя, под которым установлено текущее подключение. Задается при подключении и может быть изменено или сброшено.
VERBOSITY
Настраивает уровень подробности сообщений об ошибках от сервера.

Возможные значения:

  • default — стандартный уровень (по умолчанию);
  • verbose — подробный вывод;
  • terse — краткий вывод;
  • sqlstate — только коды ошибок SQL.
VERSION
VERSION_NAME
VERSION_NUM
Отражают версию самого psql. VERSION — подробная строка версии, VERSION_NAME — короткий строковый формат (например, 13.4), VERSION_NUM — числовое представление (например, 130004). Значения устанавливаются при запуске psql, но могут быть изменены или сброшены.

Интерполяция SQL

Одна из ключевых возможностей переменных в psql — это возможность их подстановки (интерполяции) в SQL-запросы и аргументы метакоманд. Кроме того, psql предоставляет удобные средства для безопасной подстановки значений переменных как SQL-литералов или идентификаторов, с правильной экранизацией.

Синтаксис интерполяции значения без каких-либо кавычек заключается в добавлении двоеточия перед именем переменной (:), например:

testdb=> \set foo 'my_table'
testdb=> SELECT * FROM :foo;

Этот запрос выберет данные из таблицы my_table. Однако такой способ может быть небезопасным: значение переменной вставляется как есть, и если оно содержит несбалансированные кавычки или команды с обратной косой чертой, это может привести к ошибкам или даже уязвимостям. Поэтому важно следить за тем, куда вставляется значение переменной и что в нем содержится.

Если значение переменной должно использоваться как SQL-литерал или идентификатор, следует заключать его в соответствующие кавычки. Для безопасной подстановки строки в виде литерала используйте двоеточие и имя переменной, заключенное в одинарные кавычки. Для идентификатора — в двойные.

Эти конструкции корректно обрабатывают вложенные кавычки и специальные символы:

testdb=> \set foo 'my_table'
testdb=> SELECT * FROM :"foo";

Интерполяция не выполняется внутри кавычек обычного SQL. То есть конструкция вроде ':foo' не интерполирует переменную — и даже если бы работала, она бы некорректно обрабатывала вложенные кавычки, что небезопасно.

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

testdb=> \set content `cat my_file.txt`
testdb=> INSERT INTO my_table VALUES (:'content');

Обратите внимание, что такой подход не сработает, если файл содержит нулевые байты, так как psql не поддерживает их в значениях переменных.

Если в тексте команды встречается :name, :'name' или :"name", и переменная с таким именем не определена, psql не будет пытаться заменить ее. Это сделано потому, что символ : может использоваться в стандартном SQL — например, при приведении типов или работе с массивами. Чтобы исключить подстановку, можно экранировать двоеточие обратной косой чертой (\:).

Также существует специальный синтаксис, позволяющий проверить существование переменной: он всегда будет заменен на логическое значение (TRUEилиFALSE`), если не экранирован.

Подстановка переменных через : — это стандартный механизм SQL для встроенных языков запросов (например, ECPG). Однако конструкции вроде :'var' и :"var" — расширение psql, добавленное для безопасной подстановки значений в SQL-запросы.

Подсказки

В psql можно настраивать вид приглашений (подсказок), используя три специальные переменные: PROMPT1, PROMPT2 и PROMPT3. Эти переменные определяют текст, который отображается в разных ситуациях:

  • PROMPT1 — основная подсказка, выводимая при ожидании новой команды;
  • PROMPT2 — используется, если команда продолжается на следующей строке (например, когда не завершена точкой с запятой или открыта кавычка);
  • PROMPT3 — появляется при вводе данных для команды COPY FROM STDIN.

Значения этих переменных выводятся буквально, за исключением символов %, за которыми следуют специальные обозначения. Они заменяются соответствующими значениями из текущей сессии. Ниже приведены доступные подстановки:

%M
Полное имя хоста (включая домен) сервера базы данных, либо [local] при подключении через Unix-сокет, либо [local:/путь/к/сокету], если используется нестандартный путь.
%m
Имя хоста до первой точки, или [local], если используется Unix-сокет.
%>
Номер порта, к которому установлено подключение.
%n
Имя пользователя текущей сессии (может измениться через SET SESSION AUTHORIZATION).
%/
Имя текущей базы данных.
%~
Аналогично %/, но если база данных соответствует имени пользователя, выводится ~.
%#
Символ #, если пользователь — суперпользователь, иначе >.
%p
PID текущего процесса PostgreSQL.
%R
В PROMPT1 обычно =, но @ если сессия находится в неактивной ветви условного блока или ^ если в однострочном режиме, или ! если сессия отключена от базы данных (что может произойти, если \connect не удается).

Во PROMPT2 %R заменяется символом, который зависит от того, почему psql ожидает дополнительного ввода: - если команда просто еще не завершена, но * если есть незавершенный комментарий /* ... */, одиночная кавычка, если есть незаконченная строка в кавычках, двойная кавычка, если есть незаконченный идентификатор в кавычках, знак доллара, если есть незаконченная строка с долларовой кавычкой, или ( если есть нескорректированная левая скобка.

В PROMPT3 %R ничего не производит.

%x
Состояние транзакции:
  • пустая строка — нет активной транзакции;
  • * — транзакция активна;
  • ! — транзакция прервана;
  • ? — состояние неизвестно.
%l
Номер строки внутри текущего оператора, начиная с 1.
%digits
Заменяется символ с указанным восьмеричным кодом.
%:name:
Значение переменной psql равно name. Подробнее об этом в разделе «Переменные».
%command
Вывод command, аналогичный обычной подстановке «обратная кавычка».
%[ ... %]
Vркеры для обозначения непечатаемых управляющих символов (например, для изменения цвета текста или заголовка окна терминала). Это необходимо для корректной работы редактирования командной строки. Можно использовать несколько таких пар в одной подсказке. Пример:
testdb=> \set PROMPT1 '%[%033[1;33;40m%]%n@%/%R%[%033[0m%]%# '

Данная подсказка выведет имя пользователя и базу данных в жирном желтом цвете на черном фоне в терминалах, поддерживающих VT100.

%w
Вставляет пробелы такой же ширины, как последний вывод PROMPT1. Это может использоваться в качестве настройки PROMPT2, чтобы многострочные выражения выравнивались с первой строкой, но при этом не было видно вторичной подсказки.
%%
Вставка символа % дословно.

Подсказка по умолчанию — это '%/%R%x%# ' для PROMPT1 и PROMPT2, а также '>> ' для PROMPT3.

Редактирование командной строки

psql использует библиотеку Readline (или libedit, если она доступна) для удобного редактирования командной строки и работы с историей ввода. История команд автоматически сохраняется при выходе из psql и загружается при следующем запуске. Для перемещения по истории можно использовать клавишу со стрелкой вверх или сочетание Control+P.

Также поддерживается автодополнение с помощью клавиши TAB. Оно помогает дописывать ключевые слова SQL и имена объектов базы данных в большинстве (хотя и не всех) случаев. Например, если введете ins в начале команды и нажмете TAB, psql дополнит до insert into. После этого можно начать ввод имени таблицы или схемы и снова нажать TAB, чтобы автоматически завершить ввод или увидеть список возможных вариантов, если их несколько. (В зависимости от используемой библиотеки может понадобиться нажать TAB дважды, чтобы отобразить список.)

Стоит учитывать, что для автодополнения имен объектов psql отправляет запросы к серверу. Это может быть нежелательно в определенных ситуациях. Например, после команды BEGIN автодополнение может прервать последовательность ввода, не позволив выполнить SET TRANSACTION ISOLATION LEVEL, если между ними произойдет запрос к серверу.

Если хотите полностью отключить автодополнение TAB, добавьте следующее в файл .inputrc в домашнем каталоге:

$if psql
set disable-completion on
$endif

Это настройка самой библиотеки Readline, а не psql. За дополнительной информацией обратитесь к ее документации.

Кроме того, можно временно отключить Readline, запустив psql с параметром командной строки -n (--no-readline). Это отключает автодополнение, редактирование строк и работу с историей. Такой режим особенно полезен при копировании и вставке текста, содержащего символы TAB, чтобы избежать нежелательного автодополнения.

Переменные окружения

COLUMNS
Если значение, установленное с помощью команды \pset columns, равно нулю, переменная COLUMNS управляет шириной вывода в формате wrapped. Она также определяет, достаточно ли широк вывод для использования постраничного просмотра или необходимо переключиться на вертикальный формат при автоматическом расширенном режиме.
PGDATABASE
PGHOST
PGPORT
PGUSER
Параметры подключения по умолчанию.
PG_COLOR
Указывает, использовать ли цвет в диагностических сообщениях. Возможные значения — always, auto и never.
PSQL_EDITOR
EDITOR
VISUAL
Определяют, какой текстовый редактор будет использоваться при выполнении команд \e, \ef и \ev. Переменные проверяются по порядку, и используется первая из установленных. Если ни одна не задана, по умолчанию используется vi в Unix-системах и notepad.exe в Windows.
PSQL_EDITOR_LINENUMBER_ARG
Указывает, каким параметром передавать номер строки в редактор при использовании \e, \ef или \ev с указанием номера строки. Для редакторов вроде vi или emacs это, как правило, символ +. Обратите внимание, что если между параметром и номером строки требуется пробел, он должен быть явно включен в значение переменной. Примеры:
PSQL_EDITOR_LINENUMBER_ARG='+'
PSQL_EDITOR_LINENUMBER_ARG='--line '

По умолчанию в Unix используется +, поскольку он совместим с редактором vi и многими другими. В Windows значение по умолчанию отсутствует.

PSQL_HISTORY
Альтернативное расположение файла истории команд. Выполняется расширение тильды (~).
PSQL_PAGER
PAGER
Определяют, какая команда будет использоваться для постраничного вывода, если результат запроса превышает размер экрана. Типичные значения — less или more. Чтобы полностью отключить PAGER, установите PAGER или переменную LESS в пустую строку, либо измените параметры через команды psql. Проверяются переменные по порядку, используется первая заданная. Если ни одна не установлена, по умолчанию используется less (на большинстве систем) или more (на Cygwin).
PSQL_WATCH_PAGER
При использовании команды \watch (\g с интервалом повтора), PAGER по умолчанию не применяется. Установив эту переменную, можно задать собственную команду пейджера для Unix-систем. Например, lv (внешняя утилита, не входящая в PostgreSQL) с параметром -c может корректно отображать такой вывод.
PSQLRC
Альтернативное местоположение файла .psqlrc пользователя. Выполняется расширение тильды (~).
SHELL
Команда выполняется командой \!.
TMPDIR
Каталог для хранения временных файлов. По умолчанию используется /tmp.

Клиент psql использует переменные окружения, поддерживаемые libpq.

Файлы

psqlrc и ~/.psqlrc

: Если не указан параметр -X, после подключения к базе данных, но до начала обработки пользовательских команд, psql выполняет команды из двух файлов запуска: сначала из системного (psqlrc), затем из пользовательского (~/.psqlrc). Эти файлы обычно применяются для настройки поведения клиента и/или сервера с помощью команд \set и SET.

Системный файл запуска называется psqlrc и по умолчанию размещается в каталоге системной конфигурации установки PostgreSQL. Точное расположение можно определить командой pg_config --sysconfdir, которая обычно указывает на директорию вида ../etc/ относительно директории с исполняемыми файлами PostgreSQL. Путь к этому каталогу можно изменить, задав переменную окружения PGSYSCONFDIR.

Пользовательский файл запуска .psqlrc по умолчанию располагается в домашней директории вызывающего пользователя. В системах Windows вместо него используется файл %APPDATA%\postgresql\psqlrc.conf. Оба пути могут быть переопределены с помощью переменной окружения PSQLRC.

Оба файла могут иметь версии, специфичные для определенной версии psql. Для этого к имени файла добавляется суффикс с основной или полной версией PostgreSQL, например ~/.psqlrc-15 или ~/.psqlrc-15.5. Если такой файл существует, он будет использоваться в приоритетном порядке перед файлом без указания версии. Суффикс версии добавляется после определения пути к файлу.

.psql_history
История команд psql сохраняется в файле ~/.psql_history, а в Windows — в %APPDATA%\postgresql\psql_history.

Путь к файлу истории можно переопределить через переменную HISTFILE, установленную внутри psql, либо с помощью переменной окружения PSQL_HISTORY.

Примечания

При использовании psql важно учитывать особенности взаимодействия клиента с серверами PostgreSQL различных версий, особенно при наличии отличий в основных версиях:

  • Клиент psql наиболее надежно работает с серверами PostgreSQL той же или более старой основной версии. Команды, начинающиеся с обратной косой черты (например, \d), могут не работать корректно, если сервер имеет более новую версию, чем сам psql. Тем не менее, команды \d и аналогичные обычно остаются работоспособными при подключении к серверам до версии 9.2, хотя и не обязательно с серверами новее, чем psql сам по себе.

    Выполнение SQL-команд и отображение результатов также должна работать с серверами более новой основной версии, но это поведение не гарантировано.

  • Если необходимо использовать psql с несколькими серверами разных версий, рекомендуется использовать самую свежую версию psql. Альтернативой может быть установка отдельных копий psql для каждой основной версии и использование соответствующей копии для каждого сервера, однако в большинстве случаев это излишне.

  • В версиях до PostgreSQL 9.6 параметр -c подразумевал использование -X (--no-psqlrc), начиная с 9.6 это поведение изменено.

  • До версии PostgreSQL 8.4 psql позволял указывать первый аргумент команды без пробела сразу после обратной косой черты — теперь между командой и аргументом обязательно требуется пробел.

Примечания для пользователей Windows

Клиент psql реализован как консольное приложение. Поскольку консоль Windows использует отдельную кодировку, при работе с 8-битными символами в psql могут возникать проблемы. При запуске psql выдает предупреждение, если определяет неподдерживаемую кодовую страницу. Чтобы избежать проблем, необходимо:

  1. Установить корректную кодовую страницу консоли, например:

    cmd.exe /c chcp 1252

    Где значение 1252 подходит для немецкой локали, для других языков следует указать соответствующую кодовую страницу.

    В Cygwin можно добавить эту команду в файл /etc/profile.

  2. Изменить шрифт консоли на 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)