Инструменты пользователя

Инструменты сайта


dopolnitelnye_vozmozhnosti_klienta_psql

Различия

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

Ссылка на это сравнение

dopolnitelnye_vozmozhnosti_klienta_psql [2018/07/21 07:04] (текущий)
Строка 1: Строка 1:
 +====== Дополнительные возможности клиента psql ======
 +
 +~~Title: psql интерактивный терминал PostgreSQL ~~
 +{{htmlmetatags>​
 +metatag-description=(Использование psql интерактивный терминал PostgreSQL. Ключи psql, примеры использования.)
 +}}
 +
 +**psql** (PostgreSQL interactive terminal) — интерактивный терминал PostgreSQL.
 +
 +Программа psql — это терминальный клиент для работы с [[PostgreSQL]]. Она позволяет интерактивно вводить запросы,​ передавать их в PostgreSQL и видеть результаты. Также запросы могут быть получены из файла или из аргументов командной строки. Кроме того, psql предоставляет различные возможности для облегчения написания скриптов и автоматизации широкого спектра задач.
 +
 +  * [[pgAdmin]] - графический клиент для работы с PostgreSQL.
 +  * [[phpPgAdmin]] позволяет через браузер осуществлять администрирование сервера PostgreSQL, запускать команды SQL и просматривать содержимое таблиц и баз данных.
 +
 +{{ :​postgresql-helps.png?​nolink |}}
 +
 +===== Параметры командной строки =====
 +
 +Все параметры соединения psql записываются следующим образом:​ <​file>​
 +psql -h hostname -p 5432 -d dbname -U username -W
 +</​file>​
 +Полная команда запуска psql имеет следующий синтаксис:<​file>​
 +psql [OPTION]... [DBNAME [USERNAME]]
 +</​file>​
 +
 +Необязательный параметр DBNAME определяет базу данных,​ к которой производится исходное подключение. Необязательный параметр USERNAME определяет имя пользователя [[PostgreSQL]],​ применяемое для подключения. При отсутствии этих параметров используются имя пользователя операционной системы,​ запустившего программу,​ и ассоциированная с ним база данных.
 +
 +В командной строке также могут задаваться дополнительные ключи. По умолчанию psql поддерживает как стандартные короткие ключи в стиле Unix (например,​ -с), так и длинные ключи в стиле GNU (например,​ --command). В некоторых системах второй вариант недоступен. В следующем перечне приведены короткие ключи Unix, всегда состоящие из одной буквы, за которыми указывается эквивалентный длинный ключ.
 +<​file>​
 +# 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>​.
 +</​file>​
 +
 +  * **Общие параметры(General options):**
 +  * -c, --command=COMMAND Вместо запуска в интерактивном режиме psql выполняет всего одну команду. Команда должна иметь правильный синтаксис [[SQL]], причем в ней не могут использоваться специфические команды psql. Например:<​file>​
 +psql -U postgres -d mydb --command="​INSERT INTO countries (english,​russian) ​
 +VALUES ('​Ivory Coast',​ '​Кот-д''​Ивуар'​);"​
 +</​file>​
 +  * -d, --dbname=DBNAME База данных,​ к которой производится исходное подключение.
 +  * -f, --file=FILENAME Вместо запуска в интерактивном режиме psql читает код SQL из файла с заданным именем и выполняет его так, как если бы он был введен непосредственно в командной строке. После обработки файла psql завершает работу. Например:<​file>​
 +# sudo -u postgres psql -d mbillcz5054 -f /​var/​lib/​pgsql/​transaction.sql ​
 +BEGIN
 +DELETE 636
 +DELETE 1
 +COMMIT
 +</​file>​
 +  * -l, --list Вывод списка баз данных,​ к которым может подключиться клиент:​ <​file>​
 +# psql -U postgres -l
 +</​file>​
 +  * -v, --set=, --variable=NAME=VALUE
 +  * -X, --no-psqlrc ​ Запрет чтения и выполнения стартового файла (~/​.psqlrc).
 +  * -1 ("​one"​),​ --single-transaction Выполняет из файла все команды,​ как одну [[транзакция|транзакцию]].
 +
 +  * **Входные и выходные параметры(Input and output options):**
 +  * -a, --echo-all
 +  * -e, --echo-queries
 +  * -E, --echo-hidden укажет psql выводить текст [[SQL]] запроса для выполнения заданных вами команд,​ например для команды \du будет выведен его SQL вариант. Аналогичного эффекта можно добиться командой \set ECHOJHIDDEN клиента psql.
 +  * -a, --echo-all. Включение режима полного вывода эха для всех строк, полученных psql. Ключ обычно используется при написании сценариев и эквивалентен команде \set ECHO all клиента psql.
 +  * -e, --echo-queries. Включение режима вывода эха для запросов.
 +  * -A, --no-align. Клиент psql выводит результаты без выравнивания. Если ключ не задан, по умолчанию выбирается режим вывода с выравниванием.
 +  * -F, --field-separator=STRING. Заданный символ используется psql в качестве разделителя нолей. По умолчанию используется символ "​|"​.
 +    - h хост, - - host хост. Имя компьютера,​ на котором работает сервер PostgreSQL. Обычно не является обязательным при подключении к локальному серверному процессу с использованием доменных сокетов Unix. Тем не менее если процесс postmaster работает с файлом доменного сокета в каталоге,​ отличном от принятого по умолчанию каталога /tmp, то параметр хост с начальным символом / интерпретируется как локальный каталог,​ содержащий файл доменного сокета (например,​ при передаче параметра -h /var/pgsql клиент psql ищет файл доменного сокета в каталоге /​var/​pgsql).
 +  * -H, -html. Запуск psql в режиме вывода в формате HTML.
 +  * -Т атрибут,​ -table-attr атрибут. Атрибут HTML, включаемый в тег <​tab1e>​ в режиме вывода HTML (например,​ width=100X). Чтобы передать в этом параметре несколько табличных атрибутов,​ заключите их в кавычки. В psql атрибуты также могут задаваться командой \pset.
 +  * -о файл, -output файл. Выходные данные psql направляются в заданный файл.
 +  * -р порт, -port порт. Порт TCP/IP (или числовой доменный сокет Unix), на котором в данный момент ведется прослушивание. Совпадает со значением переменной PGPORT (по умолчанию — 5432).
 +  * -Р имя=значение,​ - -pset имя=зпачение. Параметры форматирования выходных данных в синтаксисе команды \pset. Имена совпадают с именами параметров \pset, но значение параметра отделяется от имени не пробелом,​ а знаком равенства (=).
 +  * -q, --quiet. Режим минимального вывода,​ в котором не выводятся ни информационные сообщения psql, ни пояснительный текст.
 +  * -R разделитель,​ -record-separator разделитель. Заданный символ используется psql в качестве разделителя записей.
 +  * -s, --single-step. Пошаговый режим работы. После выполнения команды SQL пользователю предлагается продолжить или завершить работу.
 +  * -S, --single-line. Строчный режим работы. В этом режиме символ новой строки интерпретируется как символ точки с запятой (;), завершающий команду SQL.
 +  * -t, --tuples-only. Подавление вывода дополнительных данных (например,​ имен полей и итоговых данных). В psql эта задача решается командой \t.
 +  * -U пользователь,​ -username пользователь. Подключение к базе данных с заданным именем пользователя.
 +  * -v имя=значение,​ --variable имя=значение. Присваивание значения переменной с заданным именем (по аналогии с командой \set в psql). Значение отделяется от имени не пробелом,​ а знаком равенства (=).
 +  * -V, - -version. Вывод информации о версии.
 +  * -w, --no-password
 +  * -W, --password. Запрос пароля перед подключением к базе данных. Введенный пароль продолжает действовать в течение всего сеанса psql.
 +  * -x, --expanded. Расширенный режим форматирования записей. Активизируется в psql командой \х.
 +  * -?, - -help. Вывод краткой справки по аргументам командной строки psql.
 +
 +====== Управляющие команды psql ======
 +В psql существуют особые команды,​ начинающиеся с символа \. Эти команды управляют работой psql и не передаются серверу PostgreSQL. Ниже приведены описания управляющих команд psql.
 +
 +
 +  * **Вывод информации о PostgreSQL и psql**.
 +В psql существует небольшая группа команд,​ предназначенных для вывода информации о PostgreSQL и самом клиенте psql. Они используются прежде всего для получения справочной информации о других командах.
 +<​file>​
 +postgres=# help
 +You are using psql, the command-line interface to PostgreSQL.</​file>​
 +  * \copyright Команда выводит информацию об авторских правах на PostgreSQL.
 +  * \h или \help Общая команда получения справочной информации SQL. При вызове без аргумента выводится список всех команд,​ для которых имеется подробная справка. С аргументом выводится дополнительная информация по заданной теме. Если в качестве аргумента указан символ *, команда возвращает справку по синтаксису всех документированных команд SQL.
 +  * \? Команда выводит список управляющих команд psql, описанных ниже.
 +  * \g or terminate with semicolon to execute query
 +  * \q (или комбинация клавиш Ctrl+D) Выйти из PostgreSQL
 +
 +  * **Системные команды**.
 +Следующая группа команд относится к общесистемным функциям psql — подключению к другой базе данных,​ вызову внешнего редактора,​ присваиванию значений переменным psql и завершению работы с клиентом.
 +  * \c[onnect] [DBNAME|- USER|- HOST|- PORT|-] Смена текущей базы данных. Аргументы команды определяют базу данных и имя пользователя,​ под которым производится подключение (если оно отлично от текущего имени пользователя). Если последний аргумент не задан, используется текущее имя пользователя.
 +  * \encoding [ENCODING] ​  show or set client encoding
 +  * \password [USERNAME] ​  ​securely change the password for a user
 +
 +  * **Команды ввода-вывода**.
 +
 +Команды ввода-вывода psql предназначены для импортирования и экспортирования данных,​ а также для настройки параметров пересылки данных.
 +  * \р. Вывод текущего содержимого буфера psql (история запросов). Если с момента выполнения последней команды новые данные не поступали,​ отображается последняя выполненная команда.
 +
 +
 +    \edit [ файл ]. Запуск внешнего редактора,​ в котором загружается либо заданный файл, либо (при отсутствии аргумента) текущее содержимое буфера запроса. После завершения редактирования новое содержимое пересылается в буфер запроса или, если оно завершено символом точки с запятой (:), немедленно выполняется. При редактировании файла psql определяет,​ какой редактор следует запустить,​ просмотром следующих переменных среды (в указанном порядке):​ PSQL_EDITOR,​ EDITOR и VISUAL. Если ни одна из этих переменных не определена,​ psql пытается запустить команду /bin/vi.
 +
 +    \set [ переменная [ значение ] ]. Присваивание значений переменным среды. При вызове без аргументов команда выводит список всех текущих значений переменных среды, а при вызове с аргументами заданной переменной присваивается новое значение. При передаче нескольких значений переменной присваивается результат их конкатенации.
 +    \unset переменная. Сброс, то есть удаление из памяти,​ переменных среды. Результат отличается от присваивания пустой строки,​ поскольку в этом случае переменная продолжает существовать в памяти.
 +    \! [ команда ]. Выполнение внешних команд. При вызове без аргументов запускается сеанс командного интерпретатора,​ который временно замещает приглашение psql (до завершения сеанса). При вызове с аргументами заданная команда выполняется в psql, а результаты выводятся в stdout.
 +
 +====== Команды форматирования ======
 +
 +  * **Команды форматирования**
 +Команды \pset, \а, \С, \f, \H, \t, \T и \х управляют форматированием выходных данных. Каждая команда (за исключением \pset) управляет отдельным аспектом форматирования. Команда \pset, появившаяся позже других,​ позволяет управлять практически всеми параметрами. Остальные команды существуют для совместимости со старыми версиями и для удобства,​ но большинство из них дублирует возможности \pset.
 +<​file>​\pset параметр [значение]</​file>​
 +Основная команда настройки параметров форматирования,​ самая важная и самая мощная из всех команд psql, управляющая большим количеством параметров. Возможно,​ другие команды вам вообще не понадобятся. Ниже перечислены значения параметра команды \pset.
 +  * \pset format [значение]. Устанавливает формат вывода aligned, unaligned, html или latex. По умолчанию используется вывод с выравниванием (aligned), самый наглядный из всех вариантов. При сплошном выводе (unaligned) все данные выводятся в одной строке и разделяются текущим символом-разделителем. В режимах html и latex данные выводятся в виде таблиц,​ предназначенных для включения в документы HTML и LaTeX соответственно.
 +  * \pset border. Изменяет толщину рамки таблиц в зависимости от выбранного формата вывода. Например,​ при выводе в режиме HTML значение этого параметра отражается в атрибуте border тега <​table>​. Параметр принимает числовое значение. Как правило,​ с увеличением числа растет толщина выводимой рамки.
 +  * \pset expanded. Переключение между обычным и расширенным форматами вывода. Если у вас возникают проблемы с выводом данных на экран (например,​ если строки переносятся недопустимым образом),​ попробуйте изменить этот параметр. В расширенном формате psql выводит все данные в два столбца. В левом столбце приводится имя поля, а в правом — его значение.
 +  * \pset null. Параметр задает строку,​ выводимую вместо псевдозначения NULL. Обычно вместо NULL выводится пустая строка,​ которая определяется при помощи двух апострофов (' '). Любая другая строка заключается в апострофы. Пример:<​file>​
 +\pset null ' ***null*** '
 +</​file>​
 +  * \pset fieldsep. Параметр задает символ,​ используемый для разделения полей в режиме сплошного вывода (unaligned). По умолчанию используется вертикальная черта (|). При желании можно воспользоваться другим,​ более привычным разделителем — например,​ символом табуляции (U) или запятой (.). В других режимах форматирования разделитель полей игнорируется.
 +  * \pset recordsep. Разделитель записей в режиме сплошного вывода. По умолчанию используется символ новой строки (\п).
 +  * \pset tuples_only. Параметр указывает,​ ограничивается ли вывод одними данными (то есть результатами запроса) или же в него включаются дополнительные сведения о таблице (заголовки и комментарии).
 +  * \pset title. Параметр задает заголовок — строку,​ предшествующую всему стандартному выводу. Пустая строка задается двумя апострофами (' ').
 +  * \pset tab! eattr. Используется в режиме форматирования HTML для определения атрибутов тега <​table>​ (например,​ width, cell padding и cell spacing). Если потребуется определить сразу несколько атрибутов,​ не забудьте заключить строку атрибутов в апострофы.
 +  * \pset pager. Параметр разрешает или запрещает использование программы постраничного вывода содержимого таблиц. Если вы хотите использовать вместо тоге другую программу постраничного вывода (например,​ less), перед запуском psql задайте значение переменной среды PAGER в командном интерпретаторе.
 +  * \а. Переключение между режимом вывода с выравниванием и сплошным выводом. Эквивалент последовательного выполнения команд \pset format al igned и \pset format unaligned.
 +  * \С. Заголовок запроса,​ выводимый перед данными итогового набора. Эквивалент команды \pset title.
 +  * \f. Разделитель полей, используемый в режиме сплошного вывода. Эквивалент команды \pset fieldsep.
 +  * \Н. Переключение между выводом в формате HTML и стандартным режимом вывода с выравниванием. Эквивалент последовательного выполнения команд \pset format HTML и \pset format aligned.
 +  * \t. Признак вывода дополнительной информации таблиц. Эквивалент команды \pset tuples_only.
 +  * \Т. Дополнительные атрибуты таблиц,​ вставляемые в теги <​tab!e>​ в режиме форматирования HTML. Эквивалент команды \pset tableattr.
 +  * \х. Переключение режима расширенного вывода. Эквивалент команды \pset expanded.
 +====== Команды вывода информации о БД и объектах ======
 +**Команды вывода информации о базе данных и различных объектах внутри нее.**
 +
 +Большинство этих команд снабжается префиксом \d (от слова "​display"​). Умение пользоваться этими командами повышает эффективность работы с базой данных.<​file>​
 +Informational
 +  (options: S = show system objects, + = additional detail)
 +  \d[S+] ​                list tables, views, and sequences
 +  \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
 +  \l[+]                  list all databases
 +  \z      [PATTERN] ​     same as \dp
 +</​file>​
 +  * \d [ имя_отношения ]. Общая команда для получения различных сведений о заданном отношении — индексе,​ последовательности,​ таблице или представлении. Команда выводит имена и типы всех полей отношения,​ а также специальные атрибуты или значения по умолчанию. Если имя отношения не указано,​ команда выводит информацию обо всех отношениях текущей базы данных.
 +  * \da [ агрегатная_фупкция ]. Команда выводит список агрегатных функций текущей базы данных и поддерживаемые ими типы данных. Если команда вызывается с параметром,​ она выводит список только тех агрегатных функций,​ имена которых начинаются с заданного шаблона (без учета регистра символов).
 +  * \dd [ имя ]. Общая команда для получения информации об объектах базы данных. Параметр может быть именем любой агрегатной или обычной функции,​ оператора,​ отношения,​ правила или триггера. Если имя не задано,​ выводится информация обо всех объектах базы данных.
 +  * \df [ имя_фунщии ]. Команда выводит информацию о функции,​ определенной в базе данных,​ в том числе о типах ее аргументов и возвращаемом значении. Если имя функции не задано,​ выводится информация обо всех функциях в базе. Как и в случае с командами \da и \dd, при вводе полного или частичного имени функции команда выводит список всех функций,​ имена которых начинаются с заданного шаблона (без учета регистра символов).
 +  * \d[istvS] [ имя ]. Общая команда вывода информации об отношениях с возможностью уточнения. Символы в квадратных скобках имеют следующий смысл:
 +          * i — индексы;​
 +          * s — последовательности;​
 +          * t — таблицы;​
 +          * v — представления;​
 +          * S — системные таблицы.
 +  * \dl. Команда выводит информацию о больших объектах текущей базы данных;​ эквивалент команды \1o_list.
 +  * \do [ имя_оператора ]. Команда выводит список всех операторов,​ определенных в текущей базе данных,​ с типами операндов и возвращаемого значения. Как и в других командах,​ можно задать полное или частичное имя оператора или получить информацию обо всех доступных операторах.
 +  * \dp [ имя_объекта ]. Команда выводит список всех объектов текущей базы данных (или объектов,​ имена которых хотя бы частично совпадают с заданным) вместе с информацией о правах доступа (общих,​ пользовательских и групповых).
 +  * \dT [ имя_типа ]. Команда выводит список всех доступных типов данных. Можно задать полное или частичное имя типа или получить информацию обо всех доступных типах.
 +  * \l[+] Команда выводит список всех баз данных на сервере с информацией о владельцах и типе расширенной кодировке.
 +  * \lo_list. Команда выводит список всех больших объектов текущей базы данных с комментариями.
 +  * \z [ имя_объекта ]. Команда выводит информацию о правах доступа;​ эквивалент команды \dp.
 +====== Загрузка запросов из внешних файлов ======
 +Кроме непосредственного ввода запросов в приглашении,​ в psql предусмотрена возможность создания запросов и команд в файлах с последующей загрузкой их содержимого в текущий буфер.
 +Пусть файл содержащий SQL запрос называется 1.sql и содержит в себе запрос<​file>​
 +select * from pg_shadow;
 +</​file>​Чтобы содержимое загружаемого файла выводилось в psql, присвойте переменной ECHO значение all (команда \set ECHO all), по умолчанию содержиое файла 1.sql не показывается.
 +
 +  * Пример. Загрузка файла в текущий буфер psql<​file>​
 +postgres-# \set ECHO all
 +postgres-# | \i /​home/​darkfire/​1.sql
 +select * from pg_shadow;
 + ​usename ​ | usesysid | usecreatedb | usesuper | usecatupd | userepl |               ​passwd ​               | valuntil | useconfig ​
 +----------+----------+-------------+----------+-----------+---------+-------------------------------------+----------+-----------
 + ​postgres |       10 | t           | t        | t         | t       ​| ​                                    ​| ​         | 
 + ​www7777 |    16385 | f           | f        | f         | f       | md5689015ab7b2aeffa35245598db8994fc |          | 
 +(2 rows)
 +</​file>​
 +====== Библиотеки readline и history ======
 +Клиент psql обладает некоторыми возможностями режима командной строки,​ поддерживаемыми интерпретатором bash: автоматическим завершением команд,​ обратным поиском и историей команд (файл /​home/​пользователь/​psql_history). Все эти возможности доступны благодаря поддержке библиотеки readline, обеспечивающей эти функции bash.
 +
 +Если конфигурационный сценарий находит в системе библиотеку readline, то поддержка обратного поиска,​ завершения и истории команд устанавливается автоматически при компиляции PostgreSQL. Если после компиляции выяснится,​ что в psql эти возможности отсутствуют,​ это может объясняться тем, что библиотечные и/или заголовочные файлы находились в нестандартном каталоге.
 +
 +====== Работа с переменными ======
 +Клиент psql также позволяет работать с переменными. **Команда \set** создает и модифицирует переменные,​ а команда \unset удаляет их. Переменные psql работают так же, как переменные среды в командных интерпретаторах Unix и Linux (например,​ bash). Хотя в целом переменные psql реализованы довольно просто,​ они приносят несомненную пользу,​ поскольку значения переменных легко подставляются в управляющие команды psql и в команды SQL.
 +
 +<​note>​При работе с переменными следует помнить,​ что в psql существует несколько внутренних переменных. Присваивание этим переменным произвольных значений может иметь непредсказуемые и нежелательные последствия для работы программы.</​note>​
 +
 +Новое значение переменной задается командой \set, за которой указываются имя и значение,​ разделенные пробелами. Команда либо изменяет значение существующей переменной,​ либо создает новую переменную,​ если переменная с указанным именем не существует. Имя переменной имеет произвольную длину и содержит произвольную комбинацию букв, цифр и символов подчеркивания,​ а значение переменной может быть строкой любой длины.
 +
 +  * Присваивание значения переменной.<​file>​
 +testdb=# \set myvariable 'There are many like it. but this one is mine.'
 +</​file>​Если теперь ввести команду \set без аргументов,​ переменная появляется в общем списке.<​file>​
 +testdb-# \set
 +VERSION = '​PostgreSQL 7.1.3 on i586-pc-linux-gnu. compiled by GCC 2.96'
 +DBNAME = '​testdb1
 +USER = '​postgres'​
 +PORT = '​5432'​
 +ENCODING = '​SQL_ASCII'​
 +PROMPT1 = '​%/​№%#​ '
 +PROMPT2 = '​*/​та#​ '
 +PROMPTS = '» '
 +HISTSIZE = '​500'​
 +myvariable = 'There are many like it. but this one is mine.'
 +</​file>​
 +
 +После определения переменной ее можно включать как во внутренние управляющие команды psql, так и в команды SQL. Подстановка значения переменной вместо ее имени называется интерполяцией. Механизм интерполяции открывает много полезных возможностей — например,​ можно загрузить файл в переменную,​ а затем использовать загруженное содержимое в команде INSERT или SELECT. Возможны и более простые подстановки.
 +
 +Чтобы подставить значение переменной,​ укажите перед ее именем префикс :. Ниже приведен пример интерполяции в командах INSERT и SELECT.
 +
 +  * Интерполяция в командах SQL<​file>​
 +testdb=# \set manager_id 150
 +testdb=# INSERT INTO employees VALUES (
 +testdb(# '​Kevin',​ testdb(# '​Murphy',​
 +testdb(# :manager_id
 +testdb(# ):
 +testdb=# SELECT * FROM employees WHERE id = :​manager_id;​
 +firstname I lastname I id
 +Kevin | Murphy | 150
 +(1 row)
 +</​file>​
 +
 +Как упоминалось выше, в переменную можно загрузить содержимое файла, а затем интерполировать ее в другую команду. Для этого присвойте переменной результат выполнения команды cat (команда Unix, предназначенная для вывода содержимого файла),​ заключенный в обратные апострофы (' '). В листингах 6.5 и 6.6 в качестве примера используется файл tab! edata, находящийся в домашнем каталоге пользователя (~/).
 +
 +  * Чтение данных из файла в переменную<​file>​
 +testdb=# \set data 'cat tabledata'​
 +testdb=# \echo :data
 +'​Mike'​. '​Nelson'​. 151
 +</​file>​
 +
 +  * Интерполяция переменной в команде INSERT<​file>​
 +testdb=# INSERT INTO employees VALUES (-.data):
 +</​file>​В таблице employees появляется новая запись со значениями полей, загруженными из переменной data.
 +===== Команды copy echo =====
 +  * **\copy** таблица { FROM | ТО }файл \ stdin | stdout. Команда позволяет скопировать данные,​ полученные от клиентского приложения (с правами пользователя,​ запустившего клиента),​ вместо копирования данных с сервера командой SQL COPY. Поддерживаются все стандартные элементы команды COPY. За дополнительной информацией о синтаксисе обращайтесь к описанию команды COPY. Следует помнить о принципиальных различиях между командами \copy и COPY: Данные,​ скопированные командой \copy, сначала передаются через клиентское приложение. При этом скорость копирования оказывается несколько ниже, чем при непосредственном копировании из серверного процесса. Доступ к файлам локальной файловой системы предоставляется с правами учетной записи текущего пользователя. Таким образом,​ клиент может иметь расширенный (или наоборот,​ ограниченный) доступ к файлам по сравнению с серверным процессом.
 +
 +<note important>​Обозначения stdin и stdout (стандартный ввод и вывод) интерпретируются по-разному:​ в psql они относятся ко входному и выходному потокам. В контексте серверного процесса stdin представляет источник данных команды COPY, a stdout представляет выходной поток запроса.</​note>​
 +  * \echo строка. Заданная строка передается в стандартный вывод. Команда часто используется при написании сценариев,​ поскольку с ее помощью можно включить в вывод сценария данные,​ не предоставляемые СУБД (например,​ комментарии).
 +  * \д [ файл ]. Команда выполнения буфера. Как и символ точки с запятой (:) в конце команды SQL, передает текущее содержимое буфера запроса серверу для обработки. Аргумент позволяет сохранить итоговый набор в заданном файле или передать его следующей программе для дальнейшей обработки.
 +  * \i файл. Чтение входных данных из файла с заданным именем. Содержимое файла интерпретируется так, словно оно было введено непосредственно в приглашении psql.
 +  * \1o_export old файл. Экспортирование больших объектов с заданным идентификатором объекта (OID) в локальную файловую систему. Отличается от функции сервера 1o_export() так же, как команда \copy в psql отличается от команды COPY в SQL.
 +  * \lo_import файл [ комментарий ]. Импортирование больших объектов из локальной файловой системы в базу данных. К объекту можно присоединить необязательный комментарий;​ это рекомендуется делать,​ поскольку в противном случае на него можно будет ссылаться только по значению OID, которое придется запоминать для дальнейшего использования. Если присоединить к объекту комментарий,​ то команда \lo_list выведет комментарий вместе со значением OID объекта,​ что упростит его поиск после импортирования.
 +  * \о [ файл \ /​команда ]. Перенаправление вывода (например,​ результатов выборки) в файл или его передача системной команде для дальнейшей обработки. Если аргумент не задан, перенаправление прекращается и происходит восстановление стандартного вывода. Особого внимания заслуживает возможность конвейерной (pipe) передачи вывода системным командам (например,​ дгер), что позволяет проводить поиск по шаблонам в выходных данных запросов и управляющих команд psql.
 +  * \qecho строка. Заданная строка направляется в канал вывода,​ заданный командой \о (вместо stdout). Команда обычно используется для включения дополнительной информации в выходной поток psql.
 +  * \w файл \ /​команда. Текущий буфер запроса направляется в заданный файл или передается системной команде для дальнейшей обработки.
  
загрузка...
dopolnitelnye_vozmozhnosti_klienta_psql.txt · Последние изменения: 2018/07/21 07:04 (внешнее изменение)