psql#

psql

psql

psql — Интерактивный терминал Tantor SE

Синтаксис

psql [опция...] [dbname [имя_пользователя]]

Описание

psql - это терминальный интерфейс для работы с Tantor SE. Он позволяет вводить запросы интерактивно, отправлять их в Tantor SE и просматривать результаты запросов. Кроме того, входные данные могут быть взяты из файла или переданы через аргументы командной строки. Кроме того, psql предоставляет ряд метакоманд и различные функции, похожие на команды оболочки, для упрощения написания сценариев и автоматизации широкого спектра задач.

Опции

-a
--echo-all #

Выводить все непустые строки входного потока на стандартный вывод по мере их чтения. (Это не относится к строкам, считываемым интерактивно). Это эквивалентно установке переменной ECHO в all.

-A
--no-align #

Переключает режим вывода в не выровненный режим. (Режим вывода по умолчанию - aligned). Это эквивалентно команде \pset format unaligned.

-b
--echo-errors #

Выводите неудачные SQL-команды в стандартный поток ошибок. Это эквивалентно установке переменной ECHO в errors.

-c command
--command=command #

Указывает, что psql должен выполнить заданную командную строку, command. Этот параметр может быть повторен и комбинирован в любом порядке с параметром -f. Когда указаны параметры -c или -f, psql не считывает команды из стандартного ввода; вместо этого он завершается после обработки всех параметров -c и -f последовательно.

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

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

или

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

(\\ является мета-командой-разделителем).

Каждая строка команды SQL, переданная с помощью параметра -c, отправляется на сервер как один запрос. Из-за этого сервер выполняет его как одну транзакцию, даже если строка содержит несколько команд SQL, если только в строке нет явных команд BEGIN/COMMIT, разделяющих ее на несколько транзакций. (См. Раздел 53.2.2.1 для получения дополнительной информации о том, как сервер обрабатывает строки с несколькими запросами).

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

psql <<EOF
\x
SELECT * FROM foo;
EOF
--csv #

Переключает режим вывода в формат CSV (Comma-Separated Values). Это эквивалентно команде \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. Когда указаны параметры -c или -f, psql не читает команды из стандартного ввода; вместо этого он завершается после обработки всех параметров -c и -f последовательно. За исключением этого, этот параметр в значительной степени эквивалентен метакоманде \i.

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

Использование этой опции немного отличается от написания psql < filename. Обычно, оба варианта сделают то, что вы ожидаете, но использование -f позволяет использовать некоторые полезные функции, такие как сообщения об ошибках с указанием номера строки. Также есть небольшой шанс, что использование этой опции снизит издержки при запуске. С другой стороны, вариант с использованием перенаправления ввода оболочки (в теории) гарантирует точно такой же вывод, который вы бы получили, если бы ввели все вручную.

-F separator
--field-separator=separator #

Используйте separator в качестве разделителя полей для не выровненного вывода. Это эквивалентно командам \pset fieldsep или \f.

-h hostname
--host=hostname #

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

-H
--html #

Переключает режим вывода в формат HTML. Это эквивалентно команде \pset format html или команде \H.

-l
--list #

Список всех доступных баз данных, затем выйти. Другие не связанные с подключением опции игнорируются. Это аналогично мета-команде \list.

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

-L filename
--log-file=filename #

Запишите все выводы запроса в файл filename, в дополнение к обычному месту вывода.

-n
--no-readline #

Не используйте Readline для редактирования строк и не используйте историю команд (см. the section called “Редактирование командной строки” ниже).

-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 #

Указывает, что psql должен работать тихо. По умолчанию он выводит приветственные сообщения и различную информацию. Если используется этот параметр, ничего из этого не происходит. Это полезно с опцией -c. Это эквивалентно установке переменной QUIET в значение on.

-R separator
--record-separator=separator #

Используйте separator в качестве разделителя записей для не выровненного вывода. Это эквивалентно команде \pset recordsep.

-s
--single-step #

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

-S
--single-line #

Запускает в режиме однострочного режима, где перевод строки завершает SQL-команду, как и точка с запятой.

Примечание

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

-t
--tuples-only #

Отключите печать имен столбцов и подвалов с количеством строк результата и т. д. Это эквивалентно командам \t или \pset tuples_only.

-T table_options
--table-attr=table_options #

Указывает параметры, которые должны быть размещены внутри HTML table тег. См. \pset tableattr для получения более подробной информации.

-U username
--username=username #

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

-v assignment
--set=assignment
--variable=assignment #

Совершите присваивание переменной, подобное метакоманде \set. Обратите внимание, что вы должны разделить имя и значение, если оно есть, знаком равенства в командной строке. Чтобы снять установку переменной, пропустите знак равенства. Чтобы установить переменную с пустым значением, используйте знак равенства, но пропустите значение. Эти присваивания выполняются во время обработки командной строки, поэтому переменные, отражающие состояние подключения, будут перезаписаны позже.

-V
--version #

Выведите версию psql и завершите работу.

-w
--no-password #

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

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

-W
--password #

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

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

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

-x
--expanded #

Включите режим форматирования таблицы с расширенным видом. Это эквивалентно командам \x или \pset expanded.

-X
--no-psqlrc #

Не читайте файл запуска (ни системный файл psqlrc, ни файл пользователя ~/.psqlrc).

-z
--field-separator-zero #

Установите разделитель полей для не выровненного вывода на нулевой байт. Это эквивалентно команде \pset fieldsep_zero.

-0
--record-separator-zero #

Установите разделитель записей для не выровненного вывода на нулевой байт. Это полезно, например, для взаимодействия с xargs -0. Это эквивалентно \pset recordsep_zero.

-1
--single-transaction #

Эта опция может использоваться только в сочетании с одной или несколькими опциями -c и/или -f. Она заставляет psql выполнять команду BEGIN перед первой такой опцией и команду COMMIT после последней, тем самым оборачивая все команды в одну транзакцию. Если какая-либо из команд завершается с ошибкой и установлена переменная ON_ERROR_STOP, вместо этого отправляется команда ROLLBACK. Это гарантирует, что либо все команды успешно завершаются, либо никакие изменения не применяются.

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

-?
--help[=topic] #

Показать справку о psql и выйти. Опциональный параметр topic (по умолчанию options) выбирает, какая часть psql будет объяснена: commands описывает обратные слэш-команды psql; options описывает параметры командной строки, которые можно передать psql; и variables показывает справку о конфигурационных переменных psql.

Статус выхода

psql возвращает 0 в оболочку, если завершается нормально, 1, если возникает критическая ошибка (например, нехватка памяти, файл не найден), 2, если соединение с сервером прервано и сессия не является интерактивной, и 3, если произошла ошибка в скрипте и установлена переменная ON_ERROR_STOP.

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

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

psql является обычным клиентским приложением Tantor SE. Для подключения к базе данных вам нужно знать имя целевой базы данных, имя хоста и номер порта сервера, а также имя пользователя базы данных, под которым вы хотите подключиться. psql может быть проинформирован об этих параметрах через параметры командной строки, а именно -d, -h, -p и -U соответственно. Если найден аргумент, который не принадлежит ни одной опции, он будет интерпретирован как имя базы данных (или имя пользователя базы данных, если имя базы данных уже указано). Не все из этих опций обязательны; существуют полезные значения по умолчанию. Если вы опустите имя хоста, psql подключится через сокет Unix-домена к серверу на локальном хосте или через TCP/IP к localhost на Windows. Номер порта по умолчанию определяется во время компиляции. Поскольку сервер базы данных использует тот же номер порта по умолчанию, в большинстве случаев вам не придется указывать порт. Имя пользователя базы данных по умолчанию совпадает с вашим именем пользователя операционной системы. Как только имя пользователя базы данных определено, оно используется как имя базы данных по умолчанию. Обратите внимание, что вы не можете просто подключиться к любой базе данных под любым именем пользователя базы данных. Ваш администратор базы данных должен был проинформировать вас о ваших правах доступа.

Когда значения по умолчанию не подходят, вы можете сэкономить время на наборе, установив переменные среды PGDATABASE, PGHOST, PGPORT и/или PGUSER на соответствующие значения. (Дополнительные переменные среды см. в разделе Раздел 32.15). Также удобно иметь файл ~/.pgpass, чтобы не приходилось постоянно вводить пароли. Дополнительную информацию см. в разделе Раздел 32.16.

Альтернативным способом указания параметров подключения является использование строки conninfo или URI, которая используется вместо имени базы данных. Этот механизм дает вам очень широкий контроль над подключением. Например:

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

Таким образом, вы также можете использовать LDAP для поиска параметров подключения, как описано в Раздел 32.18. См. Раздел 32.1.2 для получения дополнительной информации о всех доступных параметрах подключения.

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

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

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

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

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

testdb=>

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

Если ненадежные пользователи имеют доступ к базе данных, которая не приняла безопасный шаблон использования схем, начните сессию, удалив общедоступные схемы, доступные для записи, из search_path. Можно добавить options=-csearch_path= в строку подключения или выполнить SELECT pg_catalog.set_config('search_path', '', false) перед выполнением других SQL-команд. Это соображение не специфично для psql; оно применимо к любому интерфейсу для выполнения произвольных SQL-команд.

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

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

Мета-команды

Любая команда, которую вы вводите в psql и начинается с обратной косой черты без кавыек, является метакомандой psql, которая обрабатывается самим psql. Эти команды делают psql более полезным для администрирования или написания сценариев. Метакоманды часто называются слеш-командами или командами с обратной косой чертой.

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

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

Если после двоеточия (:) без кавычек следует имя переменной psql, то оно заменяется значением переменной, как описано в разделе SQL Interpolation ниже. Формы :'variable_name' и :"variable_name", описанные там, также работают. Синтаксис :{?variable_name} позволяет проверить, определена ли переменная. Он заменяется на TRUE или FALSE. Экранирование двоеточия с помощью обратной косой черты защищает его от замены.

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

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

Разбор аргументов останавливается в конце строки или когда найдена другая обратная косая черта без кавычек. Обратная косая черта без кавычек считается началом новой мета-команды. Специальная последовательность \\ (два обратных слеша) обозначает конец аргументов и продолжает разбор команд SQL, если таковые имеются. Таким образом, команды SQL и psql могут свободно смешиваться в одной строке. Однако, аргументы мета-команды не могут продолжаться за пределами строки.

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

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

\a #

Если текущий формат вывода таблицы не выровненный, он переключается на выровненный. Если он не является выровненным, он устанавливается в выровненный. Эта команда сохраняется для обратной совместимости. См. \pset для более общего решения.

\bind [ parameter ] ... #

Устанавливает параметры запроса для следующего выполнения запроса, с указанными параметрами, переданными для любых заполнителей параметров ($1 и т.д.).

Пример:

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

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

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

\c or \connect [ -reuse-previous=on|off ] [ dbname [ username ] [ host ] [ port ] | conninfo ] #

Устанавливает новое соединение с сервером Tantor SE. Параметры соединения можно указать либо с использованием позиционного синтаксиса (один или несколько из имени базы данных, пользователя, хоста и порта), либо с использованием строки соединения conninfo, подробно описанной в разделе Раздел 32.1.1. Если аргументы не указаны, создается новое соединение с использованием тех же параметров, что и ранее.

Спецификация любого из параметров dbname, username, host или port как - эквивалентна опусканию этого параметра.

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

Если новое соединение установлено успешно, предыдущее соединение закрывается. Если попытка соединения не удалась (неправильное имя пользователя, отказ в доступе и т. д.), предыдущее соединение сохраняется, если psql находится в интерактивном режиме. Но при выполнении неинтерактивного сценария старое соединение закрывается, и выводится ошибка. Это может или не может привести к завершению сценария; если нет, все команды доступа к базе данных будут неудачными, пока не будет успешно выполнена другая команда \connect. Это различие было выбрано как удобство для пользователя против опечаток, с одной стороны, и механизм безопасности, чтобы сценарии случайно не действовали на неправильную базу данных, с другой стороны. Обратите внимание, что при попытке команды \connect повторно использовать параметры, значения, которые повторно используются, являются значениями последнего успешного соединения, а не любых последующих неудачных попыток. Однако в случае неинтерактивной ошибки \connect не разрешается повторное использование параметров позже, поскольку сценарий, вероятно, ожидает использования значений из неудавшегося \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 title. (Название этой команды происходит от caption, так как ранее она использовалась только для установки заголовка в таблице HTML).

\cd [ directory ] #

Изменяет текущий рабочий каталог на directory. Без аргумента изменяет на домашний каталог текущего пользователя.

Подсказка

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

\conninfo #

Выводит информацию о текущем подключении к базе данных.

\copy { таблица [ ( список_столбцов ) ] } from { 'имя_файла' | program 'команда' | stdin | pstdin } [ [ with ] ( опция [, ...] ) ] [ where условие ]
\copy { table [ ( column_list ) ] | ( query ) } to { 'filename' | program 'command' | stdout | pstdout } [ [ with ] ( option [, ...] ) ] #

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

Когда указывается program, command выполняется с помощью psql, и данные, передаваемые из или к command, маршрутизируются между сервером и клиентом. Опять же, привилегии выполнения принадлежат локальному пользователю, а не серверу, и не требуются привилегии SQL суперпользователя.

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

Синтаксис этой команды аналогичен синтаксису команды SQL COPY. Все опции, кроме источника/приемника данных, указываются так же, как и для команды COPY. Из-за этого для метакоманды \copy применяются специальные правила разбора. В отличие от большинства других метакоманд, весь оставшийся фрагмент строки всегда считается аргументами \copy, и в аргументах не выполняется интерполяция переменных или раскрытие обратных кавычек.

Подсказка

Другой способ получить тот же результат, что и \copy ... to, - использовать команду SQL COPY ... TO STDOUT и завершить ее с помощью \g filename или \g |program. В отличие от \copy, этот метод позволяет команде занимать несколько строк; также можно использовать интерполяцию переменных и раскрытие обратных кавычек.

Подсказка

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

Показывает условия авторского права и распространения Tantor SE.

\crosstabview [ colV [ colH [ colD [ sortcolH ] ] ] ] #

Выполняет текущий буфер запросов (как \g) и показывает результаты в виде кросс-таблицы. Запрос должен возвращать как минимум три столбца. Выходной столбец, идентифицированный как colV, становится вертикальным заголовком, а выходной столбец, идентифицированный как colH, становится горизонтальным заголовком. colD идентифицирует выходной столбец для отображения в сетке. sortcolH идентифицирует необязательный столбец сортировки для горизонтального заголовка.

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

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

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

Внутри сетки crosstab, для каждого отдельного значения x из colH и каждого отдельного значения y из colV, ячейка, расположенная на пересечении (x,y), содержит значение столбца colD в строке результата запроса, для которой значение colH равно x, а значение colV равно y. Если такой строки нет, ячейка пуста. Если есть несколько таких строк, выводится ошибка.

\d[S+] [ pattern ] #

Для каждого отношения (таблицы, представления, материализованного представления, индекса, последовательности или внешней таблицы) или составного типа, соответствующего заданному шаблону pattern, показываются все столбцы, их типы, табличное пространство (если не является пространством по умолчанию) и любые специальные атрибуты, такие как NOT NULL или значения по умолчанию. Также показываются связанные индексы, ограничения, правила и триггеры. Для внешних таблиц также показывается связанный внешний сервер. (Соответствие шаблону определено в разделе Patterns ниже).

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

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

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

Примечание

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

\da[S] [ pattern ] #

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

\dA[+] [ pattern ] #

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

\dAc[+] [access-method-pattern [input-type-pattern]] #

Списки классов операторов (см. Раздел 36.15.1). Если указан параметр access-method-pattern, перечисляются только классы операторов, связанные с методами доступа, имена которых соответствуют этому шаблону. Если указан параметр input-type-pattern, перечисляются только классы операторов, связанные с типами ввода, имена которых соответствуют этому шаблону. Если к имени команды добавлен символ +, каждый класс операторов перечисляется вместе с его связанной семьей операторов и владельцем.

\dAf[+] [access-method-pattern [input-type-pattern]] #

Списки семейств операторов (см. Раздел 36.15.5). Если указан параметр access-method-pattern, перечисляются только семейства операторов, связанные с методами доступа, имена которых соответствуют этому шаблону. Если указан параметр input-type-pattern, перечисляются только семейства операторов, связанные с типами ввода, имена которых соответствуют этому шаблону. Если к имени команды добавлен символ +, каждое семейство операторов перечисляется вместе с его владельцем.

\dAo[+] [access-method-pattern [operator-family-pattern]] #

Списки операторов, связанных с семействами операторов (см. Раздел 36.15.2). Если указан параметр access-method-pattern, перечисляются только члены семейств операторов, связанных с методами доступа, имена которых соответствуют этому шаблону. Если указан параметр operator-family-pattern, перечисляются только члены семейств операторов, имена которых соответствуют этому шаблону. Если к имени команды добавлен символ +, каждый оператор перечисляется вместе с его семейством сортировочных операторов (если он является оператором сортировки).

\dAp[+] [access-method-pattern [operator-family-pattern]] #

Списки содержат функции, связанные с семействами операторов (см. Раздел 36.15.3). Если указан параметр access-method-pattern, перечисляются только функции семейств операторов, связанных с методами доступа, имена которых соответствуют этому шаблону. Если указан параметр operator-family-pattern, перечисляются только функции семейств операторов, имена которых соответствуют этому шаблону. Если к имени команды добавлен символ +, функции отображаются подробно, с указанием их фактических списков параметров.

\db[+] [ pattern ] #

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

\dc[S+] [ pattern ] #

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

\dconfig[+] [ pattern ] #

Список параметров конфигурации сервера и их значений. Если указан pattern, выводятся только параметры, имена которых соответствуют шаблону. Если pattern не указан, выводятся только параметры, установленные в нестандартные значения. (Используйте \dconfig *, чтобы увидеть все параметры). Если к имени команды добавлен символ +, каждый параметр выводится со своим типом данных, контекстом, в котором можно установить параметр, и правами доступа (если были предоставлены нестандартные права доступа).

\dC[+] [ pattern ] #

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

\dd[S] [ pattern ] #

Показывает описания объектов типа constraint, operator class, operator family, rule и trigger. Все остальные комментарии могут быть просмотрены с помощью соответствующих обратных слэш-команд для этих типов объектов.

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

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

\dD[S+] [ pattern ] #

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

\ddp [ pattern ] #

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

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

\dE[S+] [ pattern ]
\di[S+] [ pattern ]
\dm[S+] [ pattern ]
\ds[S+] [ pattern ]
\dt[S+] [ pattern ]
\dv[S+] [ pattern ] #

В этой группе команд буквы E, i, m, s, t и v обозначают внешнюю таблицу, индекс, материализованное представление, последовательность, таблицу и представление соответственно. Вы можете указать любую или все эти буквы в любом порядке, чтобы получить список объектов этих типов. Например, \dti показывает таблицы и индексы. Если к имени команды добавить +, каждый объект будет показан со своим статусом сохранения (постоянный, временный или незафиксированный), физическим размером на диске и связанным описанием, если есть. Если указан шаблон, будут показаны только объекты, имена которых соответствуют шаблону. По умолчанию показываются только объекты, созданные пользователем; чтобы включить системные объекты, укажите шаблон или модификатор S.

\des[+] [ pattern ] #

Список внешних серверов (мнемоника: внешние серверы). Если указан параметр pattern, перечисляются только те серверы, имена которых соответствуют шаблону. Если используется форма \des+, отображается полное описание каждого сервера, включая его права доступа, тип, версию, опции и описание.

\det[+] [ pattern ] #

Список внешних таблиц (мнемоника: внешние таблицы). Если указан шаблон, перечисляются только записи, в которых имя таблицы или схемы соответствует шаблону. Если используется форма \det+, также отображаются общие параметры и описание внешней таблицы.

\deu[+] [ pattern ] #

Список отображений пользователей (мнемоника: внешние пользователи). Если указан параметр pattern, перечисляются только те отображения, имена пользователей которых соответствуют шаблону. Если используется форма \deu+, показывается дополнительная информация о каждом отображении.

Предостережение

\deu+ также может отображать имя пользователя и пароль удаленного пользователя, поэтому следует быть осторожным, чтобы не раскрывать их.

\dew[+] [ pattern ] #

Список внешних оберток (мнемоника: внешние обертки). Если указан pattern, перечисляются только те внешние обертки, имя которых соответствует шаблону. Если используется форма \dew+, также показываются права доступа, параметры и описание внешней обертки.

\df[anptwS+] [ pattern [ arg_pattern ... ] ] #

Перечисляет функции вместе с их типами данных результата, типами данных аргументов и типами функций, которые классифицируются как agg (агрегатные), normal (обычные), procedure (процедуры), trigger (триггеры) или window (оконные). Чтобы отображать только функции определенного типа (типов), добавьте соответствующие буквы a, n, p, t или w к команде. Если указано pattern, отображаются только функции, имена которых соответствуют шаблону. Любые дополнительные аргументы являются шаблонами имен типов, которые сопоставляются с именами типов первого, второго и так далее аргументов функции. (Соответствующие функции могут иметь больше аргументов, чем вы указали. Чтобы предотвратить это, напишите тире - в качестве последнего arg_pattern.) По умолчанию отображаются только объекты, созданные пользователем; укажите шаблон или модификатор S, чтобы включить системные объекты. Если используется форма \df+, отображается дополнительная информация о каждой функции, включая изменчивость, безопасность параллельного выполнения, владельца, классификацию безопасности, права доступа, язык, внутреннее имя (только для функций на C и внутренних функций) и описание. Исходный код для конкретной функции можно увидеть, используя \sf.

\dF[+] [ pattern ] #

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

\dFd[+] [ pattern ] #

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

\dFp[+] [ pattern ] #

Списки парсеров текстового поиска. Если указан pattern, показываются только парсеры, имена которых соответствуют шаблону. Если используется форма \dFp+, показывается полное описание каждого парсера, включая базовые функции и список распознаваемых типов компонентов.

\dFt[+] [ pattern ] #

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

\dg[S+] [ pattern ] #

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

\dl[+] #

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

\dL[S+] [ pattern ] #

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

\dn[S+] [ pattern ] #

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

\do[S+] [ pattern [ arg_pattern [ arg_pattern ] ] ] #

Список операторов с их операндами и типами результата. Если указан параметр pattern, перечисляются только операторы, имена которых соответствуют этому шаблону. Если указан один параметр arg_pattern, перечисляются только префиксные операторы, тип правого аргумента которых соответствует этому шаблону. Если указаны два параметра arg_pattern, перечисляются только бинарные операторы, типы аргументов которых соответствуют этим шаблонам. (Вместо этого можно написать - для неиспользуемого аргумента унарного оператора). По умолчанию показываются только объекты, созданные пользователем; для включения системных объектов укажите шаблон или модификатор S. Если к имени команды добавить +, будет показана дополнительная информация о каждом операторе, в настоящее время только имя базовой функции.

\dO[S+] [ pattern ] #

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

\dp[S] [ pattern ] #

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

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

\dP[itn+] [ pattern ] #

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

Если используется модификатор n (nested), или указан шаблон, то включаются не корневые секционированные отношения, и отображается столбец, показывающий родительское отношение каждого секционированного отношения.

Если к имени команды добавлен символ +, то будет отображаться сумма размеров каждой разделенной связи, а также описание связи. Если символ n объединен с символом +, то будут показаны два размера: один, включающий общий размер непосредственно присоединенных листовых секций, и другой, показывающий общий размер всех секций, включая косвенно присоединенные подсекции.

\drds [ role-pattern [ database-pattern ] ] #

Список настроек конфигурации. Эти настройки могут быть специфичными для роли, специфичными для базы данных или и тем, и другим. role-pattern и database-pattern используются для выбора конкретных ролей и баз данных для перечисления, соответственно. Если они не указаны или указан символ *, перечисляются все настройки, включая те, которые не являются специфичными для роли или базы данных, соответственно.

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

\drg[S] [ pattern ] #

Перечисляет информацию о каждом предоставленном членстве в роли, включая назначенные опции (ADMIN, INHERIT и/или SET) и праводателя. См. команду GRANT для получения информации о членствах в ролях.

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

\dRp[+] [ pattern ] #

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

\dRs[+] [ pattern ] #

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

\dT[S+] [ pattern ] #

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

\du[S+] [ pattern ] #

Список ролей базы данных. (Поскольку понятия "пользователи" и "группы" были объединены в "роли", эта команда теперь эквивалентна \dg). По умолчанию отображаются только созданные пользователем роли; добавьте модификатор S, чтобы включить системные роли. Если указан шаблон (параметр pattern), перечисляются только те роли, имена которых соответствуют шаблону. Если используется форма \du+, отображается дополнительная информация о каждой роли; в настоящее время это добавляет комментарий для каждой роли.

\dx[+] [ pattern ] #

Список установленных расширений. Если указан параметр pattern, перечисляются только те расширения, имена которых соответствуют шаблону. Если используется форма \dx+, перечисляются все объекты, принадлежащие каждому соответствующему расширению.

\dX [ pattern ] #

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

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

\dy[+] [ pattern ] #

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

\e or \edit [ filename ] [ line_number ] #

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

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

Обработка буфера как одной строки в основном влияет на мета-команды: все, что находится в буфере после мета-команды, будет воспринято как аргумент(ы) для мета-команды, даже если оно занимает несколько строк. (Таким образом, нельзя создавать сценарии, использующие мета-команды, таким образом. Для этого используйте \i).

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

Подсказка

См. Environment ниже, чтобы узнать, как настроить и настроить свой редактор.

\echo text [ ... ] #

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

=> \echo `date`
Tue Oct 26 21:40:57 CEST 1999

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

Подсказка

Если вы используете команду \o для перенаправления вывода вашего запроса, вам может понадобиться использовать команду \qecho вместо этой команды. См. также команду \warn.

\ef [function_description [ line_number ]] #

Эта команда извлекает и редактирует определение именованной функции или процедуры, в форме команды CREATE OR REPLACE FUNCTION или CREATE OR REPLACE PROCEDURE. Редактирование выполняется так же, как и для \edit. Если вы выйдете из редактора без сохранения, оператор будет отменен. Если вы сохраните и выйдете из редактора, обновленная команда будет немедленно выполнена, если вы добавили к ней точку с запятой. В противном случае она будет отображена снова; введите точку с запятой или \g для отправки ее или \r для отмены.

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

Если не указана функция, предлагается пустой шаблон CREATE FUNCTION для редактирования.

Если указан номер строки, psql разместит курсор на указанной строке тела функции. (Обратите внимание, что тело функции обычно не начинается с первой строки файла).

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

Подсказка

См. Environment ниже, чтобы узнать, как настроить и настроить свой редактор.

\encoding [ encoding ] #

Устанавливает кодировку символов клиента. Без аргумента эта команда показывает текущую кодировку.

\errverbose #

Повторяет самое последнее сообщение об ошибке сервера с максимальной детальностью, как если бы VERBOSITY был установлен в verbose, а SHOW_CONTEXT был установлен в always.

\ev [view_name [ line_number ]] #

Эта команда извлекает и редактирует определение именованного представления, в виде команды CREATE OR REPLACE VIEW. Редактирование выполняется так же, как и для \edit. Если вы выйдете из редактора без сохранения, оператор будет отменен. Если вы сохраните и выйдете из редактора, обновленная команда будет немедленно выполнена, если вы добавили к ней точку с запятой. В противном случае она будет отображена снова; введите точку с запятой или \g для отправки ее, или \r для отмены.

Если не указано представление, предлагается пустой шаблон CREATE VIEW для редактирования.

Если указан номер строки, psql разместит курсор на указанной строке определения представления.

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

\f [ string ] #

Устанавливает разделитель полей для выравнивания вывода запроса. По умолчанию используется вертикальная черта (|). Это эквивалентно команде \pset fieldsep.

\g [ (option=value [...]) ] [ filename ]
\g [ (option=value [...]) ] [ |command ] #

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

Если после \g следуют скобки, они окружают список параметров option=value, разделенных пробелами. Эти параметры интерпретируются так же, как и команды \pset option value, но действуют только в течение данного запроса. В этом списке не допускаются пробелы вокруг знаков =, но требуются пробелы между параметрами. Если =value не указано, именованный параметр option изменяется так же, как и для \pset option без явного указания value.

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

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

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

\gdesc #

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

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

\getenv psql_var env_var #

Получает значение переменной окружения env_var и присваивает его переменной psql с именем psql_var. Если переменная env_var не определена в окружении процесса psql, переменная 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 или содержать ссылки на переменные psql. Если какой-либо отдельный запрос завершается неудачно, выполнение остальных запросов продолжается, если не установлено значение ON_ERROR_STOP. Выполнение каждого запроса подвержено обработке ECHO. (Часто рекомендуется установить значение ECHO на all или queries при использовании \gexec). ведение журнала запросов, режим пошагового выполнения, время выполнения и другие функции выполнения запросов также применяются к каждому генерируемому запросу.

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

\gset [ prefix ] #

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

=> SELECT 'hello' AS var1, 10 AS var2
-> \gset
=> \echo :var1 :var2
hello 10

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

=> 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 ] #

\gx эквивалентно \g, за исключением того, что оно принудительно включает режим расширенного вывода для этого запроса, как если бы expanded=on был включен в список опций \pset. См. также \x.

\h or \help [ command ] #

Дает справку о синтаксисе указанной команды SQL. Если не указана команда command, то psql перечислит все команды, для которых доступна справка о синтаксисе. Если command является звездочкой (*), то будет показана справка о синтаксисе всех команд SQL.

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

Примечание

Для упрощения набора, команды, состоящие из нескольких слов, не обязательно нужно заключать в кавычки. Таким образом, можно вводить \help alter table.

\H or \html #

Включает формат вывода запроса в HTML. Если формат HTML уже включен, он переключается обратно на формат выравнивания текста по умолчанию. Эта команда предназначена для обеспечения совместимости и удобства, но см. команду \pset для настройки других параметров вывода.

\i or \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 не был успешным.

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

Выражения, которые не правильно вычисляются как true или false, будут генерировать предупреждение и рассматриваться как false.

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

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

Вот пример:

-- check for the existence of two separate records in the database and store
-- the results in separate psql variables
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 or \include_relative filename #

Команда \ir похожа на \i, но разрешает относительные имена файлов по-разному. При выполнении в интерактивном режиме эти две команды ведут себя одинаково. Однако, когда они вызываются из скрипта, \ir интерпретирует имена файлов относительно каталога, в котором находится скрипт, а не текущего рабочего каталога.

\l[+] or \list[+] [ pattern ] #

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

\lo_export loid filename #

Читает большой объект с OID loid из базы данных и записывает его в filename. Обратите внимание, что это немного отличается от серверной функции lo_export, которая действует с правами пользователя, от имени которого работает сервер базы данных, и на файловой системе сервера.

Подсказка

Используйте \lo_list, чтобы узнать OID большого объекта.

\lo_import filename [ comment ] #

Сохраняет файл в большой объект Tantor SE. По желанию, связывает данный комментарий с объектом. Пример:

foo=> \lo_import '/home/peter/pictures/photo.xcf' 'a picture of me'
lo_import 152801

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

Обратите внимание, что эта команда немного отличается от серверной функции lo_import, поскольку она действует от имени локального пользователя на локальной файловой системе, а не от имени пользователя и файловой системы сервера.

\lo_list[+] #

Показывает список всех больших объектов Tantor SE, которые в настоящее время хранятся в базе данных, вместе с любыми комментариями, предоставленными для них. Если к имени команды добавлен символ +, каждый большой объект перечисляется с его соответствующими разрешениями, если они есть.

Удаляет большой объект с OID loid из базы данных.

Подсказка

Используйте \lo_list, чтобы узнать OID большого объекта.

\o or \out [ filename ]
\o or \out [ |command ] #

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

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

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

Подсказка

Для вставки текстового вывода между результатами запроса используйте \qecho.

\p or \print #

Распечатать текущий буфер запроса в стандартный вывод. Если текущий буфер запроса пуст, будет напечатан вместо него последний выполненный запрос.

\password [ username ] #

Изменяет пароль указанного пользователя (по умолчанию, текущего пользователя). Эта команда запрашивает новый пароль, шифрует его и отправляет на сервер в виде команды ALTER ROLE. Это гарантирует, что новый пароль не будет отображаться в открытом виде в истории команд, журнале сервера или в других местах.

\prompt [ text ] name #

Запрашивает у пользователя ввод текста, который присваивается переменной name. Можно указать необязательную строку приглашения text. (Для многословных приглашений заключите текст в апострофы).

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

\pset [ option [ value ] ] #

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

\pset без аргументов отображает текущий статус всех параметров печати.

Настройки печати можно настроить следующим образом:

border #

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

columns #

Устанавливает целевую ширину для формата wrapped и также ограничение ширины для определения, достаточно ли выходные данные широкие, чтобы требовать использования пейджера или переключения на вертикальный режим в автоматическом режиме с развернутым выводом. Ноль (по умолчанию) приводит к тому, что целевая ширина контролируется переменной окружения COLUMNS или обнаруженной шириной экрана, если COLUMNS не установлен. Кроме того, если columns равно нулю, то формат wrapped влияет только на вывод на экран. Если columns не равно нулю, то файлы и вывод в канал оборачиваются по этой ширине.

csv_fieldsep #

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

expanded (or x) #

Если указано значение value, оно должно быть либо on, либо off, что включит или отключит расширенный режим, либо auto. Если значение value не указано, команда переключает настройки между включенным и отключенным режимами. При включенном расширенном режиме результаты запроса отображаются в двух столбцах, с именем столбца слева и данными справа. Этот режим полезен, если данные не помещаются на экране в обычном горизонтальном режиме. В режиме auto расширенный режим используется, когда вывод запроса имеет более одного столбца и шире, чем экран; в противном случае используется обычный режим. Режим auto действует только в форматах aligned и wrapped. В других форматах он всегда ведет себя так, как если бы расширенный режим был отключен.

fieldsep #

Указывает разделитель полей, который будет использоваться в выходном формате без выравнивания. Таким образом, можно создать, например, выходные данные, разделенные табуляцией, которые могут быть предпочтительными для других программ. Чтобы установить табуляцию в качестве разделителя полей, введите \pset fieldsep '\t'. Разделитель полей по умолчанию - '|' (вертикальная черта).

fieldsep_zero #

Устанавливает разделитель полей для использования в формате не выровненного вывода на нулевой байт.

Если указано значение value, оно должно быть либо on, либо off, что включит или отключит отображение нижнего колонтитула таблицы (количество строк (n). Если значение value не указано, команда переключает отображение нижнего колонтитула включено или выключено.

format #

Установка формата вывода на один из следующих: aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned или wrapped. Допускаются уникальные сокращения.

aligned формат является стандартным, читаемым для человека, красиво оформленным текстовым выводом; это значение по умолчанию.

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

csv формат записывает значения столбцов, разделенные запятыми, применяя правила экранирования, описанные в RFC 4180. Этот вывод совместим с форматом CSV команды сервера COPY. Строка заголовка с именами столбцов генерируется, если параметр tuples_only не установлен в on. Заголовки и нижние колонтитулы не печатаются. Каждая строка завершается символом конца строки, зависящим от системы, который обычно представляет собой одиночный символ новой строки (\n) для Unix-подобных систем или последовательность возврата каретки и новой строки (\r\n) для Microsoft Windows. Символы-разделители полей, отличные от запятой, можно выбрать с помощью \pset csv_fieldsep.

wrapped формат похож на aligned, но переносит широкие значения данных на несколько строк, чтобы вывод помещался в целевую ширину столбца. Целевая ширина определяется, как описано в разделе columns. Обратите внимание, что psql не пытается переносить заголовки столбцов; поэтому формат wrapped ведет себя так же, как и aligned, если общая ширина заголовков столбцов превышает целевую.

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

linestyle #

Устанавливает стиль отрисовки границы линии на один из следующих вариантов: ascii, old-ascii или unicode. Допускаются уникальные сокращения. (Это означает, что достаточно одной буквы). Значение по умолчанию - ascii. Этот параметр влияет только на форматы вывода aligned и wrapped.

Стиль ascii использует обычные символы ASCII. Переносы строк в данных отображаются с помощью символа + в правом краю. Когда формат wrapped переносит данные с одной строки на следующую без символа перехода строки, точка (.) отображается в правом краю первой строки и снова в левом краю следующей строки.

old-ascii стиль использует обычные символы ASCII, используя форматирование, используемое в PostgreSQL 8.4 и ранее. Переносы строк в данных отображаются с использованием символа : вместо разделителя левой колонки. Когда данные переносятся с одной строки на другую без символа переноса строки, используется символ ; вместо разделителя левой колонки.

Стиль unicode использует символы Unicode для рисования рамок. Переносы строк в данных показываются с помощью символа возврата каретки в правом краю. Когда данные переносятся с одной строки на следующую без символа перехода строки, в правом краю первой строки показывается символ многоточия, а затем в левом краю следующей строки.

Когда значение параметра border больше нуля, опция linestyle также определяет символы, с помощью которых рисуются граничные линии. Обычные символы ASCII работают везде, но символы Unicode выглядят лучше на дисплеях, которые их распознают.

null #

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

numericlocale #

Если указано значение value, оно должно быть либо on, либо off, что включит или отключит отображение локализованного символа для разделения групп цифр слева от десятичного разделителя. Если значение value не указано, команда переключает между обычным и локализованным числовым выводом.

pager #

Управляет использованием программы-пейджера для вывода запросов и справки psql. Когда опция pager установлена в off, программа-пейджер не используется. Когда опция pager установлена в on, пейджер используется при необходимости, т.е. когда вывод осуществляется на терминал и не помещается на экране. Опция pager также может быть установлена в always, что приводит к использованию пейджера для всего вывода на терминале, независимо от того, помещается ли он на экране. \pset pager без значения переключает использование пейджера вкл/выкл.

Если установлена переменная среды PSQL_PAGER или PAGER, вывод, который должен быть разбит на страницы, направляется в указанную программу. В противном случае используется платформозависимая программа по умолчанию (например, more).

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

pager_min_lines #

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

recordsep #

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

recordsep_zero #

Устанавливает разделитель записей для использования в формате не выровненного вывода на нулевой байт.

tableattr (or T) #

В формате HTML это указывает атрибуты, которые должны быть помещены внутрь table тег. Это, например, может быть cellpadding или bgcolor. Обратите внимание, что, вероятно, вам не нужно указывать border здесь, так как это уже учтено \pset border. Если не указано значение value, атрибуты таблицы сбрасываются.

В формате latex-longtable это управляет пропорциональной шириной каждого столбца, содержащего лево-выровненный тип данных. Он задается в виде списка значений, разделенных пробелами, например, '0.2 0.2 0.6'. Не указанные выходные столбцы используют последнее указанное значение.

title (or C) #

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

tuples_only (or t) #

Если указано значение value, оно должно быть либо on, либо off, что включит или отключит режим вывода только кортежей. Если значение value не указано, команда переключает вывод между обычным и режимом вывода только кортежей. Обычный вывод включает дополнительную информацию, такую как заголовки столбцов, названия и различные подвалы. В режиме вывода только кортежей отображаются только фактические данные таблицы.

unicode_border_linestyle #

Устанавливает стиль отрисовки границ для линии unicode в один из стилей single или double.

unicode_column_linestyle #

Устанавливает стиль отображения столбца для линии unicode в одну из следующих опций: single или double.

unicode_header_linestyle #

Устанавливает стиль рисования заголовка для линии unicode в один из стилей single или double.

xheader_width #

Устанавливает максимальную ширину заголовка для расширенного вывода на одно из full (значение по умолчанию), column, page или целое значение.

full: расширенный заголовок не обрезается и будет таким же широким, как самая широкая строка вывода.

column: обрезать строку заголовка до ширины первого столбца.

page: обрезать строку заголовка до ширины терминала.

целочисленное значение: укажите точную максимальную ширину строки заголовка.

Иллюстрации того, как выглядят эти различные форматы, можно увидеть ниже в Examples.

Подсказка

Существуют различные сокращенные команды для \pset. См. \a, \C, \f, \H, \t, \T и \x.

\q or \quit #

Завершает программу psql. В скриптовом файле просто прекращается выполнение этого скрипта.

\qecho text [ ... ] #

Эта команда идентична \echo, за исключением того, что вывод будет записан в канал вывода запроса, установленный с помощью \o.

\r or \reset #

Сбрасывает (очищает) буфер запросов.

\s [ filename ] #

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

\set [ name [ value [ ... ] ] ] #

Устанавливает переменную psql с именем name в значение value, или если указано несколько значений, в значение, полученное путем их конкатенации. Если указан только один аргумент, переменная устанавливается в пустое строковое значение. Чтобы сбросить переменную, используйте команду \unset.

\set без аргументов отображает имена и значения всех текущих установленных переменных psql.

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

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

Примечание

Эта команда не связана с командой 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 #

Указывает атрибуты, которые должны быть размещены внутри table тег в HTML формат вывода. Эта команда эквивалентна \pset tableattr table_options.

\timing [ on | off ] #

С помощью параметра включает или отключает отображение времени выполнения каждого SQL-запроса. Без параметра переключает отображение между включенным и отключенным состоянием. Время отображается в миллисекундах; интервалы длительностью более 1 секунды также отображаются в формате минут:секунд, с добавлением полей для часов и дней при необходимости.

\unset name #

Снимает (удаляет) переменную psql с именем name.

Большинство переменных, которые управляют поведением psql, не могут быть сброшены; вместо этого команда \unset интерпретируется как установка их значений по умолчанию. См. Variables ниже.

\w or \write filename
\w or \write |command #

Записывает текущий буфер запроса в файл filename или передает его в команду оболочки команда. Если текущий буфер запроса пуст, то вместо него будет записан последний выполненный запрос.

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

\warn text [ ... ] #

Эта команда идентична \echo, за исключением того, что вывод будет записан в стандартный канал ошибок psql, а не в стандартный вывод.

\watch [ i[nterval]=seconds ] [ c[ount]=times ] [ seconds ] #

Повторно выполняйте текущий буфер запросов (как делает \g) до прерывания, сбоя запроса или достижения лимита количества выполнений (если указан). Ожидайте указанное количество секунд (по умолчанию 2) между выполнениями. Для обратной совместимости seconds можно указывать с префиксом interval= или без него. Каждый результат запроса отображается с заголовком, который включает строку \pset title (если есть), время начала запроса и интервал задержки.

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

\x [ on | off | auto ] #

Устанавливает или переключает режим форматирования таблицы с расширенным выводом. Таким образом, это эквивалентно \pset expanded.

\z[S] [ pattern ] #

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

Это псевдоним для команды \dp (отображение привилегий).

\! [ command ] #

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

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

\? [ topic ] #

Показывает информацию справки. Опциональный параметр topic (по умолчанию commands) выбирает, какая часть psql будет объяснена: commands описывает обратные слэш-команды psql; options описывает параметры командной строки, которые можно передать psql; а variables показывает справку о переменных конфигурации psql.

\; #

Обратная косая черта-точка с запятой не является мета-командой, как предыдущие команды; скорее, она просто приводит к добавлению точки с запятой в буфер запроса без дополнительной обработки.

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

select 1; select 2; select 3;

приведет к отправке трех отдельных SQL-команд на сервер, с отображением результатов каждой команды перед продолжением к следующей команде. Однако точка с запятой, введенная как \;, не вызовет обработку команды, так что команда перед ней и команда после нее фактически объединяются и отправляются на сервер в одном запросе. Например

select 1\; select 2\; select 3;

результатом является отправка трех SQL-команд на сервер в одном запросе, когда достигается неэкранированная точка с запятой. Сервер выполняет такой запрос как одну транзакцию, если в строке нет явных команд BEGIN/COMMIT, включенных для разделения ее на несколько транзакций. (См. Раздел 53.2.2.1 для получения более подробной информации о том, как сервер обрабатывает множественные запросы).

Шаблоны

Все команды \d принимают параметр pattern, который определяет имя(имена) объекта(-ов), которое должно быть отображено. В простейшем случае, паттерн представляет собой точное имя объекта. Символы внутри паттерна обычно приводятся к нижнему регистру, так же, как и имена в SQL; например, \dt FOO отобразит таблицу с именем foo. Как и в SQL, если нужно включить фактический символ двойной кавычки в паттерн, напишите его как пару двойных кавычек внутри последовательности двойных кавычек; это также соответствует правилам для SQL идентификаторов в кавычках. Например, \dt "FOO""BAR" отобразит таблицу с именем FOO"BAR (а не foo"bar). В отличие от обычных правил для SQL имен, вы можете поставить двойные кавычки только вокруг части паттерна, например \dt FOO"FOO"BAR отобразит таблицу с именем fooFOObar.

Всякий раз, когда параметр pattern полностью не указан, команды \d отображают все объекты, которые видны в текущем пути поиска схемы — это эквивалентно использованию * в качестве шаблона. (Объект считается видимым, если его содержащая схема находится в пути поиска и ни один объект того же типа и имени не появляется раньше в пути поиска. Это эквивалентно утверждению, что объект может быть ссылкой по имени без явного указания схемы). Чтобы увидеть все объекты в базе данных независимо от их видимости, используйте *.* в качестве шаблона.

Внутри шаблона, * соответствует любой последовательности символов (включая отсутствие символов), а ? соответствует любому одиночному символу. (Эта запись сравнима с шаблонами имен файлов в Unix-подобных оболочках). Например, \dt int* отображает таблицы, имена которых начинаются с int. Однако внутри двойных кавычек, * и ? теряют эти специальные значения и просто сравниваются буквально.

Шаблон отношения, содержащий точку (.), интерпретируется как шаблон имени схемы, за которым следует шаблон имени объекта. Например, \dt foo*.*bar* отображает все таблицы, имена которых содержат bar, и которые находятся в схемах, имена которых начинаются с foo. Если точка не указана, то шаблон соответствует только объектам, видимым в текущем пути поиска схемы. Опять же, точка внутри двойных кавычек теряет свой специальный смысл и сравнивается буквально. Шаблон отношения, содержащий две точки (.), интерпретируется как имя базы данных, за которым следует шаблон имени схемы, за которым следует шаблон имени объекта. Часть имени базы данных не будет рассматриваться как шаблон и должна совпадать с именем текущей подключенной базы данных, иначе будет вызвана ошибка.

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

Продвинутые пользователи могут использовать обозначения регулярных выражений, такие как классы символов, например [0-9], чтобы сопоставить любую цифру. Все специальные символы регулярных выражений работают, как указано в разделе Раздел 9.7.3, за исключением символа ., который принимается в качестве разделителя, как упомянуто выше, символа *, который преобразуется в обозначение регулярного выражения .*, символа ?, который преобразуется в символ ., и символа $, который сопоставляется буквально. Вы можете эмулировать эти символы шаблона при необходимости, написав ? вместо ., (R+|) вместо R* или (R|) вместо R?. Символ $ не нужен как символ регулярного выражения, так как шаблон должен соответствовать всему имени, в отличие от обычной интерпретации регулярных выражений (другими словами, символ $ автоматически добавляется к вашему шаблону). Напишите * в начале и/или конце, если вы не хотите, чтобы шаблон был привязан. Обратите внимание, что в двойных кавычках все специальные символы регулярных выражений теряют свои специальные значения и сопоставляются буквально. Кроме того, специальные символы регулярных выражений сопоставляются буквально в шаблонах имен операторов (т.е. аргументе \do).

Расширенные возможности

Переменные

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

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

testdb=> \set foo bar

Установите переменную foo со значением bar. Чтобы получить содержимое переменной, поставьте перед именем двоеточие, например:

testdb=> \echo :foo
bar

Это работает как в обычных SQL-командах, так и в мета-командах; более подробная информация приведена в разделе SQL Interpolation, ниже.

Если вы вызываете \set без второго аргумента, переменная устанавливается в значение пустой строки. Чтобы удалить (то есть сбросить) переменную, используйте команду \unset. Чтобы показать значения всех переменных, вызовите \set без аргументов.

Примечание

Аргументы \set подчиняются тем же правилам подстановки, что и другие команды. Таким образом, вы можете создавать интересные ссылки, такие как \set :foo 'что-то' и получать мягкие ссылки или переменные переменные известного языка программирования Perl или PHP. К сожалению (или к счастью?), нет способа сделать что-либо полезное с этими конструкциями. С другой стороны, \set bar :foo - это полностью допустимый способ копирования переменной.

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

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

Специально обрабатываемые переменные:

AUTOCOMMIT #

Когда on (по умолчанию), каждая SQL-команда автоматически коммитится после успешного выполнения. Чтобы отложить коммит в этом режиме, вы должны ввести SQL-команду BEGIN или START TRANSACTION. Когда off или не установлено, SQL-команды не коммитятся до явного выполнения команды COMMIT или END. Режим отключения автокоммита работает, выполняя неявную команду BEGIN для вас, прямо перед любой командой, которая не находится в блоке транзакции и не является самой командой BEGIN или другой командой управления транзакцией, а также не является командой, которую нельзя выполнить внутри блока транзакции (например, VACUUM).

Примечание

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

Примечание

Режим автофиксации в Tantor SE включен по умолчанию, это традиционный сценарий работы, но режим отключения автофиксации больше соответсвует стандарту SQL. Если нужно отключить режим автофиксации, вы можете отключить данный режим в системном файле psqlrc или в вашем файле ~/.psqlrc.

COMP_KEYWORD_CASE #

Определяет, какой регистр использовать при завершении ключевого слова SQL. Если установлено значение lower или upper, завершенное слово будет в нижнем или верхнем регистре соответственно. Если установлено значение preserve-lower или preserve-upper (по умолчанию), завершенное слово будет иметь регистр уже введенного слова, но слова, которые завершаются без ввода чего-либо, будут в нижнем или верхнем регистре соответственно.

DBNAME #

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

ECHO #

Если установлено значение all, все непустые входные строки печатаются на стандартный вывод по мере их чтения. (Это не относится к строкам, считываемым интерактивно). Чтобы выбрать это поведение при запуске программы, используйте переключатель -a. Если установлено значение queries, psql печатает каждый запрос на стандартный вывод по мере его отправки на сервер. Переключатель для выбора этого поведения - -e. Если установлено значение errors, то только неудачные запросы отображаются на стандартный вывод ошибок. Переключатель для этого поведения - -b. Если установлено значение none (по умолчанию), то запросы не отображаются.

ECHO_HIDDEN #

Когда эта переменная установлена в значение on и команда с обратной косой чертой запрашивает базу данных, сначала показывается сам запрос. Эта функция помогает изучать внутреннее устройство Tantor SE и предоставлять аналогичную функциональность в собственных программах. (Чтобы выбрать это поведение при запуске программы, используйте ключ -E). Если вы установите это значение переменной в значение noexec, запросы только показываются, но фактически не отправляются на сервер и не выполняются. Значение по умолчанию - off.

ENCODING #

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

ERROR #

true если последний SQL-запрос завершился неудачно, false если он завершился успешно. См. также SQLSTATE.

FETCH_COUNT #

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

Подсказка

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

HIDE_TABLEAM #

Если эта переменная установлена в true, подробности доступа к методу таблицы не отображаются. Это особенно полезно для регрессионных тестов.

HIDE_TOAST_COMPRESSION #

Если эта переменная установлена в true, подробности метода сжатия столбца не отображаются. Это особенно полезно для регрессионных тестов.

HISTCONTROL #

Если эта переменная установлена в ignorespace, строки, начинающиеся с пробела, не добавляются в список истории. Если установлено значение ignoredups, строки, соответствующие предыдущей строке истории, не добавляются. Значение ignoreboth объединяет оба варианта. Если установлено значение none (по умолчанию), все строки, считанные в интерактивном режиме, сохраняются в списке истории.

Примечание

Эта функция была бесстыдно позаимствована из Bash.

HISTFILE #

Имя файла, которое будет использоваться для хранения списка истории. Если не задано, имя файла берется из переменной среды PSQL_HISTORY. Если эта переменная также не задана, используется значение по умолчанию ~/.psql_history, или %APPDATA%\postgresql\psql_history в Windows. Например, можно указать:

\set HISTFILE ~/.psql_history-:DBNAME

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

Примечание

Эта функция была бесстыдно позаимствована из Bash.

HISTSIZE #

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

Примечание

Эта функция была бесстыдно позаимствована из Bash.

HOST #

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

IGNOREEOF #

Если установлено значение 1 или меньше, отправка символа EOF (обычно Control+D) в интерактивную сессию psql приведет к завершению приложения. Если установлено большее числовое значение, для завершения интерактивной сессии необходимо ввести столько же последовательных символов EOF. Если переменная установлена на нечисловое значение, она интерпретируется как 10. Значение по умолчанию - 0.

Примечание

Эта функция была бесстыдно позаимствована из Bash.

LASTOID #

Значение последнего затронутого OID, возвращаемое командой INSERT или \lo_import. Эта переменная гарантированно действительна только до отображения результата следующей команды SQL. Серверы PostgreSQL начиная с версии 12 больше не поддерживают системные столбцы OID, поэтому LASTOID всегда будет равен 0 после выполнения команды INSERT на таких серверах.

LAST_ERROR_MESSAGE
LAST_ERROR_SQLSTATE #

Основное сообщение об ошибке и соответствующий код SQLSTATE для последнего неудачного запроса в текущей сессии psql, или пустая строка и 00000, если в текущей сессии не произошло ошибок.

ON_ERROR_ROLLBACK #

Когда установлено значение on, если оператор в блоке транзакции генерирует ошибку, ошибка игнорируется и транзакция продолжается. Когда установлено значение interactive, такие ошибки игнорируются только в интерактивных сессиях, а не при чтении скриптовых файлов. Когда установлено значение off (по умолчанию), оператор в блоке транзакции, генерирующий ошибку, прерывает всю транзакцию. Режим отката ошибки работает путем автоматического создания для вас неявной точки сохранения SAVEPOINT перед каждым оператором, находящимся в блоке транзакции, а затем откатывания к точке сохранения, если оператор завершается с ошибкой.

ON_ERROR_STOP #

По умолчанию обработка команд продолжается после ошибки. Когда эта переменная установлена в on, обработка будет немедленно остановлена. В интерактивном режиме psql вернется к приглашению командной строки; в противном случае psql завершится, возвращая код ошибки 3 для отличия этого случая от критических ошибок, которые сообщаются с использованием кода ошибки 1. В любом случае, любые текущие выполняющиеся сценарии (верхний уровень сценария, если есть, и любые другие сценарии, которые он может вызвать) будут немедленно прерваны. Если строка команд верхнего уровня содержит несколько SQL-команд, обработка остановится на текущей команде.

PORT #

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

PROMPT1
PROMPT2
PROMPT3 #

Эти теги определяют, как должны выглядеть символы-приглашения, которые выдает psql. См. ниже ссылку Prompting.

QUIET #

Установка этой переменной в значение on эквивалентна командной строке -q. В интерактивном режиме она, вероятно, не очень полезна.

ROW_COUNT #

Количество строк, возвращенных или затронутых последним SQL-запросом, или 0, если запрос не удался или не сообщил о количестве строк.

SERVER_VERSION_NAME
SERVER_VERSION_NUM #

Версия сервера в виде строки, например 9.6.2, 10.1 или 11beta1, а также в числовом виде, например 90602 или 100001. Эти значения устанавливаются каждый раз при подключении к базе данных (включая запуск программы), но могут быть изменены или сброшены.

SHELL_ERROR #

true если последняя команда оболочки завершилась неудачно, false если она выполнена успешно. Это относится к командам оболочки, вызванным через \!, \g, \o, \w, и \copy мета-команды, а также к расширению обратных кавычек (`). Обратите внимание, что для \o эта переменная обновляется, когда выходной канал закрывается следующей командой \o. См. также SHELL_EXIT_CODE.

SHELL_EXIT_CODE #

Код завершения, возвращаемый последней командой оболочки. Значения от 0 до 127 представляют коды завершения программы, от 128 до 255 указывают на завершение по сигналу, а -1 указывает на неудачу при запуске программы или сборе её кода завершения. Это относится к командам оболочки, вызываемым через \!, \g, \o, \w и \copy мета-команды, а также к расширению с использованием обратных кавычек (`). Обратите внимание, что для \o эта переменная обновляется, когда выходной канал закрывается следующей командой \o. См. также SHELL_ERROR.

SHOW_ALL_RESULTS #

Когда эта переменная установлена в off, вместо всех результатов комбинированного запроса (\;) отображается только последний результат. По умолчанию установлено значение on. Поведение off используется для обеспечения совместимости с более старыми версиями psql.

SHOW_CONTEXT #

Эта переменная может быть установлена на значения never, errors или always для управления отображением полей CONTEXT в сообщениях от сервера. По умолчанию используется значение errors (это означает, что контекст будет показан в сообщениях об ошибках, но не в сообщениях о замечаниях или предупреждениях). Эта настройка не влияет, когда VERBOSITY установлено на terse или sqlstate. (См. также \errverbose, для использования, когда вам нужна подробная версия только что полученной ошибки).

SINGLELINE #

Установка этой переменной в значение on эквивалентна командной опции -S.

SINGLESTEP #

Установка этой переменной в значение on эквивалентна командной опции -s.

SQLSTATE #

Код ошибки (см. Предметный указатель A) связанный с последним сбоем SQL-запроса, или 00000, если он выполнен успешно.

USER #

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

VERBOSITY #

Эта переменная может быть установлена на значения default, verbose, terse или sqlstate для управления детальностью отчетов об ошибках. (См. также \errverbose, для использования, когда вам нужна подробная версия только что полученной ошибки).

VERSION
VERSION_NAME
VERSION_NUM #

Эти переменные устанавливаются при запуске программы для отражения версии psql, соответственно в виде подробной строки, короткой строки (например, 9.6.2, 10.1 или 11beta1) и числа (например, 90602 или 100001). Их можно изменить или сбросить.

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

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

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

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

Когда значение должно быть использовано как SQL-литерал или идентификатор, наиболее безопасно заключить его в кавычки. Чтобы заключить значение переменной в кавычки как SQL-литерал, напишите двоеточие, за которым следует имя переменной в апострофах. Чтобы заключить значение в кавычки как 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');

(Обратите внимание, что это все равно не будет работать, если my_file.txt содержит нулевые байты. psql не поддерживает встроенные нулевые байты в значениях переменных).

Поскольку двоеточия могут легально появляться в SQL-командах, явная попытка интерполяции (то есть :name, :'name' или :"name") не заменяется, если именованная переменная в настоящее время установлена. В любом случае, вы можете экранировать двоеточие с помощью обратной косой черты, чтобы защитить его от подстановки.

Специальный синтаксис :{?name} возвращает TRUE или FALSE в зависимости от того, существует ли переменная или нет, и всегда подставляется, если двоеточие не экранировано обратной косой чертой.

Синтаксис с двоеточием для переменных является стандартным синтаксисом SQL для встроенных языков запросов, таких как ECPG. Синтаксис с двоеточием для срезов массивов и приведения типов является расширением Tantor SE, которое иногда может конфликтовать со стандартным использованием. Синтаксис с двоеточием и кавычкой для экранирования значения переменной в качестве SQL-литерала или идентификатора является расширением psql.

Запросы

Приглашения, которые выдает psql, можно настроить по вашему усмотрению. Три переменные PROMPT1, PROMPT2 и PROMPT3 содержат строки и специальные последовательности символов, которые описывают внешний приглашения. Prompt 1 - это обычное приглашение, которая выдается, когда psql запрашивает новую команду. Prompt 2 выдается, когда ожидается дополнительный ввод во время ввода команды, например, потому что команда не была завершена точкой с запятой или закрытием кавычек.Prompt 3 выдается, когда вы выполняете команду SQL COPY FROM STDIN и вам нужно ввести значение строки в терминале.

Значение выбранной переменной приглашения печатается буквально, за исключением случаев, когда встречается знак процента (%). В зависимости от следующего символа, вместо него подставляется определенный другой текст. Определенные подстановки:

%M #

Полное имя хоста (с доменным именем) сервера баз данных, или [local], если соединение осуществляется через Unix доменный сокет, или [local:/dir/name], если Unix доменный сокет не находится в скомпилированном по умолчанию местоположении.

%m #

Имя хоста сервера базы данных, обрезанное до первой точки, или [local], если соединение осуществляется через Unix-сокет.

%> #

Номер порта, на котором слушает сервер базы данных.

%n #

Имя пользователя сессии базы данных. (Расширение этого значения может изменяться во время сессии базы данных в результате команды SET SESSION AUTHORIZATION).

%/ #

Имя текущей базы данных.

%~ #

Как %/, но выводится ~ (тильда), если база данных является вашей базой данных по умолчанию.

%# #

Если пользователь сессии является суперпользователем базы данных, то будет отображаться символ #, в противном случае символ >. (Значение этой переменной может изменяться в течение сессии базы данных в результате выполнения команды SET SESSION AUTHORIZATION).

%p #

Идентификатор процесса бэкенда, который в настоящее время подключен.

%R #

В обычном режиме приглашение 1 обычно равно =, но @ если сессия находится в неактивной ветви условного блока, или ^ если в режиме однострочного ввода, или ! если сессия отключена от базы данных (что может произойти, если \connect не удалось). В приглашении 2 символ %R заменяется на символ, который зависит от того, почему psql ожидает дополнительного ввода:- если команда просто еще не завершена, но * если есть незавершенный комментарий /* ... */, апостроф, если есть незавершенная строка в кавычках, двойная кавычка, если есть незавершенный идентификатор в кавычках, знак доллара, если есть незавершенная строка в долларах, или ( если есть непарная левая скобка. В приглашении 3 символ %R ничего не выводит.

%x #

Статус транзакции: пустая строка, когда не находится в блоке транзакции, или *, когда находится в блоке транзакции, или !, когда находится в неудавшемся блоке транзакции, или ?, когда состояние транзакции неопределено (например, из-за отсутствия соединения).

%l #

Номер строки внутри текущего оператора, начиная с 1.

%digits #

Вместо символа с указанным восьмеричным кодом подставляется.

%:name: #

Значение переменной psql name. См. Variables, выше, для получения подробной информации.

%`command` #

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

%[ ... %] #

Приглашения могут содержать управляющие символы терминала, которые, например, изменяют цвет, фон или стиль текста приглашения, или меняют заголовок окна терминала. Чтобы функции редактирования строк Readline работали правильно, эти непечатаемые управляющие символы должны быть обозначены как невидимые, окружив их с помощью %[ и %]. Внутри приглашения может быть несколько пар таких символов. Например:

testdb=> \set PROMPT1 '%[%033[1;33;40m%]%n@%/%R%[%033[0m%]%# '

результаты отображаются жирным шрифтом (1;) желтым на черном фоне (33;40) вводного сообщения на терминалах, совместимых с VT100 и поддерживающих цвета.

%w #

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

Чтобы вставить знак процента в приглашение, напишите %%. По умолчанию символы приглашения выглядят так: '%/%R%x%# ' для символов prompt 1 и 2, и '>> ' для символов prompt 3.

Примечание

Эта функция была бесстыдно позаимствована из tcsh.

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

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

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

Завершение по вкладке для имен объектов SQL требует отправки запросов на сервер для поиска возможных совпадений. В некоторых контекстах это может помешать другим операциям. Например, после BEGIN будет слишком поздно выполнять запрос SET TRANSACTION ISOLATION LEVEL, если запрос на завершение по вкладке будет выполнен между ними. Если вы не хотите использовать завершение по вкладке вообще, вы можете отключить его навсегда, поместив следующее в файл с именем .inputrc в вашем домашнем каталоге:

$if psql
set disable-completion on
$endif

(Это не psql, а функция Readline. Прочитайте его документацию для получения дополнительной информации).

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

Окружение

COLUMNS #

Если \pset columns равно нулю, управляет шириной для формата wrapped и шириной для определения того, требуется ли использовать пейджер для широкого вывода или следует переключиться на вертикальный формат в расширенном автоматическом режиме.

PGDATABASE
PGHOST
PGPORT
PGUSER #

Параметры подключения по умолчанию (см. Раздел 32.15).

PG_COLOR #

Определяет, следует ли использовать цвет в диагностических сообщениях. Возможные значения: always, auto и never.

PSQL_EDITOR
EDITOR
VISUAL #

Редактор, используемый командами \e, \ef и \ev. Эти переменные проверяются в указанном порядке; используется первая, которая установлена. Если ни одна из них не установлена, по умолчанию используется vi в Unix-системах или notepad.exe в системах Windows.

PSQL_EDITOR_LINENUMBER_ARG #

Когда используется команда \e, \ef или \ev с аргументом номера строки, эта переменная указывает аргумент командной строки, используемый для передачи номера начальной строки в редактор пользователя. Для редакторов, таких как Emacs или vi, это знак плюса. Включите пробел в конце значения переменной, если между именем опции и номером строки должен быть пробел. Примеры:

PSQL_EDITOR_LINENUMBER_ARG='+'
PSQL_EDITOR_LINENUMBER_ARG='--line '

По умолчанию на Unix-системах используется + (соответствующий редактору vi по умолчанию и полезный для многих других распространенных редакторов); однако на Windows-системах нет значения по умолчанию.

PSQL_HISTORY #

Альтернативное расположение файла истории команд. Выполняется разворачивание тильды (~).

PSQL_PAGER
PAGER #

Если результаты запроса не помещаются на экране, они передаются через эту команду. Типичные значения - more или less. Использование постраничного вывода можно отключить, установив PSQL_PAGER или PAGER в пустую строку, или настроив параметры постраничного вывода команды \pset. Эти переменные проверяются в указанном порядке; используется первая установленная. Если ни одна из них не установлена, по умолчанию используется more на большинстве платформ, но less на Cygwin.

PSQL_WATCH_PAGER #

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

PSQLRC #

Альтернативное расположение файла .psqlrc пользователя. Выполняется разворачивание тильды (~).

SHELL #

Команда, выполненная с помощью команды \!.

TMPDIR #

Каталог для хранения временных файлов. По умолчанию это /tmp.

Эта утилита, как и большинство других утилит Tantor SE, также использует переменные среды, поддерживаемые libpq (см. Раздел 32.15).

Файлы

psqlrc and ~/.psqlrc #

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

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

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

Как системный файл запуска, так и личный файл запуска пользователя могут быть конкретизированы для версии psql путем добавления дефиса и идентификатора основной или минорной версии Tantor SE к имени файла, например ~/.psqlrc-16 или ~/.psqlrc-16.8. Файлу с указанием версии будет отдан приоритет при прочтении перед файлом без указания версии. Эти суффиксы версий добавляются после определения пути к файлу, как объяснено выше.

.psql_history #

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

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

Примечания

  • psql работает лучше с серверами той же или более старой основной версии. Команды с обратной косой чертой особенно вероятно, что не будут работать, если сервер является более новой версией, чем psql сам по себе. Однако команды с обратной косой чертой из семейства \d должны работать с серверами версий до 9.2, хотя не обязательно с серверами, более новыми, чем psql сам по себе. Общая функциональность выполнения SQL-команд и отображения результатов запросов также должна работать с серверами более новой основной версии, но это не может быть гарантировано во всех случаях.

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

  • Перед PostgreSQL 9.6, опция -c подразумевала опцию -X (--no-psqlrc); это больше не так.

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

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

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

  • Установите кодовую страницу, введя cmd.exe /c chcp 1252 . (1252 - это кодовая страница, подходящая для немецкого языка; замените ее на свое значение). Если вы используете Cygwin, вы можете поместить эту команду в /etc/profile.

  • Установите шрифт консоли на Lucida Console, поскольку растровый шрифт не работает с кодовой страницей ANSI.

Примеры

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

testdb=> CREATE TABLE my_table (
testdb(>  first integer not null default 0,
testdb(>  second text)
testdb-> ;
CREATE TABLE

Теперь еще раз посмотрите на определение таблицы:

testdb=> \d my_table
              Table "public.my_table"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 first  | integer |           | not null | 0
 second | text    |           |          |

Теперь мы изменяем приглашение на что-то более интересное:

testdb=> \set PROMPT1 '%n@%m %~%R%# '
peter@localhost testdb=>

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

peter@localhost testdb=> SELECT * FROM my_table;
 first | second
-------+--------
     1 | one
     2 | two
     3 | three
     4 | four
(4 rows)

Вы можете отображать таблицы разными способами, используя команду \pset:

peter@localhost testdb=> \pset border 2
Border style is 2.
peter@localhost testdb=> SELECT * FROM my_table;
+-------+--------+
| first | second |
+-------+--------+
|     1 | one    |
|     2 | two    |
|     3 | three  |
|     4 | four   |
+-------+--------+
(4 rows)

peter@localhost testdb=> \pset border 0
Border style is 0.
peter@localhost testdb=> SELECT * FROM my_table;
first second
----- ------
    1 one
    2 two
    3 three
    4 four
(4 rows)

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)