Содержание

Дополнительные возможности клиента psql

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

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

Параметры командной строки

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

psql -h hostname -p 5432 -d dbname -U username -W

Полная команда запуска psql имеет следующий синтаксис:

psql [OPTION]... [DBNAME [USERNAME]]

Необязательный параметр DBNAME определяет базу данных, к которой производится исходное подключение. Необязательный параметр USERNAME определяет имя пользователя Использование и настройка PostgreSQL, применяемое для подключения. При отсутствии этих параметров используются имя пользователя операционной системы, запустившего программу, и ассоциированная с ним база данных.

В командной строке также могут задаваться дополнительные ключи. По умолчанию psql поддерживает как стандартные короткие ключи в стиле Unix (например, -с), так и длинные ключи в стиле GNU (например, –command). В некоторых системах второй вариант недоступен. В следующем перечне приведены короткие ключи Unix, всегда состоящие из одной буквы, за которыми указывается эквивалентный длинный ключ.

# psql --help
psql is the PostgreSQL interactive terminal.

Usage:
  psql [OPTION]... [DBNAME [USERNAME]]

General options:
  -c, --command=COMMAND    run only single command (SQL or internal) and exit
  -d, --dbname=DBNAME      database name to connect to (default: "root")
  -f, --file=FILENAME      execute commands from file, then exit
  -l, --list               list available databases, then exit
  -v, --set=, --variable=NAME=VALUE
                           set psql variable NAME to VALUE
  -X, --no-psqlrc          do not read startup file (~/.psqlrc)
  -1 ("one"), --single-transaction
                           execute command file as a single transaction
  --help                   show this help, then exit
  --version                output version information, then exit

Input and output options:
  -a, --echo-all           echo all input from script
  -e, --echo-queries       echo commands sent to server
  -E, --echo-hidden        display queries that internal commands generate
  -L, --log-file=FILENAME  send session log to file
  -n, --no-readline        disable enhanced command line editing (readline)
  -o, --output=FILENAME    send query results to file (or |pipe)
  -q, --quiet              run quietly (no messages, only query output)
  -s, --single-step        single-step mode (confirm each query)
  -S, --single-line        single-line mode (end of line terminates SQL command)

Output format options:
  -A, --no-align           unaligned table output mode
  -F, --field-separator=STRING
                           set field separator (default: "|")
  -H, --html               HTML table output mode
  -P, --pset=VAR[=ARG]     set printing option VAR to ARG (see \pset command)
  -R, --record-separator=STRING
                           set record separator (default: newline)
  -t, --tuples-only        print rows only
  -T, --table-attr=TEXT    set HTML table tag attributes (e.g., width, border)
  -x, --expanded           turn on expanded table output

Connection options:
  -h, --host=HOSTNAME      database server host or socket directory (default: "/var/run/postgresql")
  -p, --port=PORT          database server port (default: "5432")
  -U, --username=USERNAME  database user name (default: "root")
  -w, --no-password        never prompt for password
  -W, --password           force password prompt (should happen automatically)

For more information, type "\?" (for internal commands) or "\help" (for SQL
commands) from within psql, or consult the psql section in the PostgreSQL
documentation.

Report bugs to <pgsql-bugs@postgresql.org>.

Управляющие команды psql

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

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

postgres=# help
You are using psql, the command-line interface to PostgreSQL.

Системные команды : PostgreSQL как выбрать базу данных

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

postgres=# \c testdb;

Команды ввода-вывода psql предназначены для импортирования и экспортирования данных, а также для настройки параметров пересылки данных.

  \edit [ файл ]. Запуск внешнего редактора, в котором загружается либо заданный файл, либо (при отсутствии аргумента) текущее содержимое буфера запроса. После завершения редактирования новое содержимое пересылается в буфер запроса или, если оно завершено символом точки с запятой (:), немедленно выполняется. При редактировании файла psql определяет, какой редактор следует запустить, просмотром следующих переменных среды (в указанном порядке): PSQL_EDITOR, EDITOR и VISUAL. Если ни одна из этих переменных не определена, psql пытается запустить команду /bin/vi.
  \set [ переменная [ значение ] ]. Присваивание значений переменным среды. При вызове без аргументов команда выводит список всех текущих значений переменных среды, а при вызове с аргументами заданной переменной присваивается новое значение. При передаче нескольких значений переменной присваивается результат их конкатенации.
  \unset переменная. Сброс, то есть удаление из памяти, переменных среды. Результат отличается от присваивания пустой строки, поскольку в этом случае переменная продолжает существовать в памяти.
  \! [ команда ]. Выполнение внешних команд. При вызове без аргументов запускается сеанс командного интерпретатора, который временно замещает приглашение psql (до завершения сеанса). При вызове с аргументами заданная команда выполняется в psql, а результаты выводятся в stdout.

Команды форматирования

Команды \pset, \а, \С, \f, \H, \t, \T и \х управляют форматированием выходных данных. Каждая команда (за исключением \pset) управляет отдельным аспектом форматирования. Команда \pset, появившаяся позже других, позволяет управлять практически всеми параметрами. Остальные команды существуют для совместимости со старыми версиями и для удобства, но большинство из них дублирует возможности \pset.

\pset параметр [значение]

Основная команда настройки параметров форматирования, самая важная и самая мощная из всех команд psql, управляющая большим количеством параметров. Возможно, другие команды вам вообще не понадобятся. Ниже перечислены значения параметра команды \pset.

Команды вывода информации о БД и объектах

Команды вывода информации о базе данных и различных объектах внутри нее.

Большинство этих команд снабжается префиксом \d (от слова "display"). Умение пользоваться этими командами повышает эффективность работы с базой данных.

Дополнительные опции: S = show system objects, + = additional detail)

  \d[S+]  NAME           describe table, view, sequence, or index
  \da[+]  [PATTERN]      list aggregates
  \db[+]  [PATTERN]      list tablespaces
  \dc[S]  [PATTERN]      list conversions
  \dC     [PATTERN]      list casts
  \dd[S]  [PATTERN]      show comments on objects
  \dD[S]  [PATTERN]      list domains
  \des[+] [PATTERN]      list foreign servers
  \deu[+] [PATTERN]      list user mappings
  \dew[+] [PATTERN]      list foreign-data wrappers
  \df[antw][S+] [PATRN]  list [only agg/normal/trigger/window] functions
  \dF[+]  [PATTERN]      list text search configurations
  \dFd[+] [PATTERN]      list text search dictionaries
  \dFp[+] [PATTERN]      list text search parsers
  \dFt[+] [PATTERN]      list text search templates
  \dg[+]  [PATTERN]      list roles (groups)
  \di[S+] [PATTERN]      list indexes
  \dl                    list large objects, same as \lo_list
  \dn[+]  [PATTERN]      list schemas
  \do[S]  [PATTERN]      list operators
  \dp     [PATTERN]      list table, view, and sequence access privileges
  \ds[S+] [PATTERN]      list sequences
  \dt[S+] [PATTERN]      list tables
  \dT[S+] [PATTERN]      list data types
  \du[+]  [PATTERN]      list roles (users)
  \dv[S+] [PATTERN]      list views
  \z      [PATTERN]      same as \dp

Загрузка запросов из внешних файлов

Кроме непосредственного ввода запросов в приглашении, в psql предусмотрена возможность создания запросов и команд в файлах с последующей загрузкой их содержимого в текущий буфер. Пусть файл содержащий SQL запрос называется 1.sql и содержит в себе запрос

select * from pg_shadow;

Чтобы содержимое загружаемого файла выводилось в psql, присвойте переменной ECHO значение all (команда \set ECHO all), по умолчанию содержиое файла 1.sql не показывается.

Библиотеки readline и history

Клиент psql обладает некоторыми возможностями режима командной строки, поддерживаемыми интерпретатором bash: автоматическим завершением команд, обратным поиском и историей команд (файл /home/пользователь/psql_history). Все эти возможности доступны благодаря поддержке библиотеки readline, обеспечивающей эти функции bash.

Если конфигурационный сценарий находит в системе библиотеку readline, то поддержка обратного поиска, завершения и истории команд устанавливается автоматически при компиляции PostgreSQL. Если после компиляции выяснится, что в psql эти возможности отсутствуют, это может объясняться тем, что библиотечные и/или заголовочные файлы находились в нестандартном каталоге.

Работа с переменными

Клиент psql также позволяет работать с переменными. Команда \set создает и модифицирует переменные, а команда \unset удаляет их. Переменные psql работают так же, как переменные среды в командных интерпретаторах Unix и Linux (например, bash). Хотя в целом переменные psql реализованы довольно просто, они приносят несомненную пользу, поскольку значения переменных легко подставляются в управляющие команды psql и в команды SQL.

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

Новое значение переменной задается командой \set, за которой указываются имя и значение, разделенные пробелами. Команда либо изменяет значение существующей переменной, либо создает новую переменную, если переменная с указанным именем не существует. Имя переменной имеет произвольную длину и содержит произвольную комбинацию букв, цифр и символов подчеркивания, а значение переменной может быть строкой любой длины.

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

Чтобы подставить значение переменной, укажите перед ее именем префикс :. Ниже приведен пример интерполяции в командах INSERT и SELECT.

Как упоминалось выше, в переменную можно загрузить содержимое файла, а затем интерполировать ее в другую команду. Для этого присвойте переменной результат выполнения команды cat (команда Unix, предназначенная для вывода содержимого файла), заключенный в обратные апострофы (' '). В листингах 6.5 и 6.6 в качестве примера используется файл tab! edata, находящийся в домашнем каталоге пользователя (~/).

Команды copy echo

Обозначения stdin и stdout (стандартный ввод и вывод) интерпретируются по-разному: в psql они относятся ко входному и выходному потокам. В контексте серверного процесса stdin представляет источник данных команды COPY, a stdout представляет выходной поток запроса.