Самоучитель по SQL-сервер в Linux



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

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

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

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

psql[ ключи ] [ бдЗд_дднных [ пользователь ] ]

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

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

  • -а, -echo- al I. Включение режима полного вывода эха для всех строк, полученных psql. Ключ обычно используется при написании сценариев и эквивалентен команде \set ECHO all клиента psql.
  • -A, -no-al ign. Клиент psql выводит результаты без выравнивания. Если ключ не задан, по умолчанию выбирается режим вывода с выравниванием.
  • -с команда, --command команда. Вместо запуска в интерактивном режиме psql выполняет всего одну команду. Команда должна иметь правильный синтаксис SQL, причем в ней не могут использоваться специфические команды psql.
  • -d база_данных, --dbname база_данных. База данных, к которой производится исходное подключение.
  • -е, - -echo-queries. Включение режима вывода эха для запросов.
  • -Е, - -echo-hidden. Включение режима вывода скрытых запросов, сгенерированных командами psql. Аналогичного эффекта можно добиться командой \set ECHOJHIDDEN клиента psql.
  • - f файл, - - f i 1 е файл. Вместо запуска в интерактивном режиме psql читает код SQL из файла с заданным именем и выполняет его так, как если бы он был введен непосредственно в командной строке. После обработки файла psql завершает работу.
  • -F разделитель, -field-separator разделитель. Заданный символ используется psql в качестве разделителя нолей.
  • - h хост, - - host хост. Имя компьютера, на котором работает сервер PostgreSQL. Обычно не является обязательным при подключении к локальному серверному процессу с использованием доменных сокетов Unix. Тем не менее если процесс postmaster работает с файлом доменного сокета в каталоге, отличном от принятого по умолчанию каталога /tmp, то параметр хост с начальным символом / интерпретируется как локальный каталог, содержащий файл доменного сокета (например, при передаче параметра -h /var/pgsql клиент psql ищет файл доменного сокета в каталоге /var/pgsql).
  • -H, -html. Запуск psql в режиме вывода в формате HTML.
  • -1, - -11 st. Вывод списка баз данных, к которым может подключиться клиент.
  • -о файл, -output файл. Выходные данные psql направляются в заданный файл.
  • -р порт, -port порт. Порт TCP/IP (или числовой доменный сокет Unix), на котором в данный момент ведется прослушивание. Совпадает со значением переменной PGPORT (по умолчанию — 5432).
  • -Р имя=значение, - -pset имя=зпачение. Параметры форматирования выходных данных в синтаксисе команды \pset. Имена совпадают с именами параметров \pset, но значение параметра отделяется от имени не пробелом, а знаком равенства (=).
  • -q, - -quiet. Режим минимального вывода, в котором не выводятся ни информационные сообщения psql, ни пояснительный текст.
  • -R разделитель, -record-separator разделитель. Заданный символ используется psql в качестве разделителя записей.
  • -s, - -single-step. Пошаговый режим работы. После выполнения команды SQL пользователю предлагается продолжить или завершить работу.
  • -S, - -single-1 ine. Строчный режим работы. В этом режиме символ новой строки интерпретируется как символ точки с запятой (;), завершающий команду SQL.
  • -1, - - tupl es - on! у. Подавление вывода дополнительных данных (например, имен полей и итоговых данных). В psql эта задача решается командой \t.
  • -Т атрибут, -table-attr атрибут. Атрибут HTML, включаемый в тег <tab1e> в режиме вывода HTML (например, width=100X). Чтобы передать в этом параметре несколько табличных атрибутов, заключите их в кавычки. В psql атрибуты также могут задаваться командой \pset.
  • -U пользователь, -username пользователь. Подключение к базе данных с заданным именем пользователя.
  • -v имя=значение, --variable имя=значение. Присваивание значения переменной с заданным именем (по аналогии с командой \set в psql). Значение отделяется от имени не пробелом, а знаком равенства (=).
  • -V, - -version. Вывод информации о версии.
  • -W. -password. Запрос пароля перед подключением к базе данных. Введенный пароль продолжает действовать в течение всего сеанса psql.
  • -х, -expanded. Расширенный режим форматирования записей. Активизируется в psql командой \х.
  • -X, - -no-psqlrc. Запрет чтения и выполнения стартового файла (~/.psqlrc).
  • -?, - -help. Вывод краткой справки по аргументам командной строки psql.

ВНИМАНИЕ

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

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

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

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

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

  • \pset параметр [значение]. Основная команда настройки параметров форматирования, самая важная и самая мощная из всех команд psql, управляющая большим количеством параметров. Возможно, другие команды вам вообще не понадобятся. Ниже перечислены значения параметра команды \pset.
    • format. Устанавливает формат вывода aligned, unaligned, html или latex. По умолчанию используется вывод с выравниванием (aligned), самый наглядный из всех вариантов. При сплошном выводе (unal igned) все данные выводятся в одной строке и разделяются текущим символом-разделителем. В режимах html и latex данные выводятся в виде таблиц, предназначенных для включения в документы HTML и LaTeX соответственно.
    • border. Изменяет толщину рамки таблиц в зависимости от выбранного формата вывода. Например, при выводе в режиме HTML значение этого параметра отражается в атрибуте border тега <table>. Параметр принимает числовое значение. Как правило, с увеличением числа растет толщина выводимой рамки.
    • expanded. Переключение между обычным и расширенным форматами вывода. Если у вас возникают проблемы с выводом данных на экран (например, если строки переносятся недопустимым образом), попробуйте изменить этот параметр. В расширенном формате psql выводит все данные в два столбца. В левом столбце приводится имя поля, а в правом — его значение.
    • null. Параметр задает строку, выводимую вместо псевдозначения NULL. Обычно вместо NULL выводится пустая строка, которая определяется при помощи двух апострофов (' '). Любая другая строка заключается в апострофы. Пример:
    • \pset null ' ***null*** '

    • fieldsep. Параметр задает символ, используемый для"разделения полей в режиме сплошного вывода (unaligned). По умолчанию используется вертикальная черта (|). При желании можно воспользоваться другим, более привычным разделителем — например, символом табуляции (U) или запятой (.). В других режимах форматирования разделитель полей игнорируется.
    • recordsep. Разделитель записей в режиме сплошного вывода. По умолчанию используется символ новой строки (\п).
    • tuples_only. Параметр указывает, ограничивается ли вывод одними данными (то есть результатами запроса) или же в него включаются дополнительные сведения о таблице (заголовки и комментарии).
    • title. Параметр задает заголовок — строку, предшествующую всему стандартному выводу. Пустая строка задается двумя апострофами (' ').
    • tab! eattr. Используется в режиме форматирования HTML для определения атрибутов тега <table> (например, width, cell padding и cell spacing). Если потребуется определить сразу несколько атрибутов, не забудьте заключить строку атрибутов в апострофы.
    • 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.

Команды вывода информации

Клиент psql поддерживает несколько команд, предназначенных для получения информации о базе данных и различных объектах внутри нее. Большинство команд снабжается префиксом \d (от слова «display»). Умение пользоваться этими командами повышает эффективность работы с базой данных.

  • \d [ имя_отношения ]. Общая команда для получения различных сведений о заданном отношении — индексе, последовательности, таблице или представлении. Команда выводит имена и типы всех полей отношения, а также специальные атрибуты или значения по умолчанию. Если имя отношения не указано, команда выводит информацию обо всех отношениях текущей базы данных.
  • \da [ агрегатная_фупкция ]. Команда выводит список агрегатных функций текущей базы данных и поддерживаемые ими типы данных. Если команда вызывается с параметром, она выводит список только тех агрегатных функций, имена которых начинаются с заданного шаблона (без учета регистра символов).
  • \dd [ имя ]. Общая команда для получения информации об объектах базы данных. Параметр может быть именем любой агрегатной или обычной функции, оператора, отношения, правила или триггера. Если имя не задано, выводится информация обо всех объектах базы данных.
  • \df [ имя_фунщии ]. Команда выводит информацию о функции, определенной в базе данных, в том числе о типах ее аргументов и возвращаемом значении. Если имя функции не задано, выводится информация обо всех функциях в базе. Как и в случае с командами \da и \dd, при вводе полного или частичного имени функции команда выводит список всех функций, имена которых начинаются с заданного шаблона (без учета регистра символов).
  • \d[istvS] [ имя ]. Общая команда вывода информации об отношениях с возможностью уточнения. Символы в квадратных скобках имеют следующий смысл:
    • i — индексы;
    • s — последовательности;
    • t — таблицы;
    • v — представления;
    • S — системные таблицы.
  • \dl. Команда выводит информацию о больших объектах текущей базы данных; эквивалент команды \1o_list.
  • \do [ имя_оператора ]. Команда выводит список всех операторов, определенных в текущей базе данных, с типами операндов и возвращаемого значения. Как и в других командах, можно задать полное или частичное имя оператора или получить информацию обо всех доступных операторах.
  • \dp [ имя_объекта ]. Команда выводит список всех объектов текущей базы данных (или объектов, имена которых хотя бы частично совпадают с заданным) вместе с информацией о правах доступа (общих, пользовательских и групповых).
  • \dT [ имя_типа ]. Команда выводит список всех доступных типов данных. Можно задать полное или частичное имя типа или получить информацию обо всех доступных типах.
  • \1. Команда выводит список всех баз данных на сервере с информацией о владельцах и типе расширенной кодировке. Команда \1 + также выводит комментарии (процедура создания комментариев описана в подразделе «Документирование базы данных» раздела «Сопровождение базы данных» главы 9).
  • \lo_list. Команда выводит список всех больших объектов текущей базы данных с комментариями.
  • \z [ имя_объекта ]. Команда выводит информацию о правах доступа; эквивалент команды \dp.

Вывод информации о PostgreSQL и psql

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

  • \?. Команда выводит список управляющих команд, описанных в данной главе.
  • \copyright. Команда выводит информацию об авторских правах на PostgreSQL.
  • \encoding. Если включена поддержка расширенных кодировок, команда позволяет задать кодировку для клиента. Если аргумент не задан, на экране выводится текущая кодировка.
  • \help. Общая команда получения справочной информации. При вызове без аргумента выводится список всех команд, для которых имеется подробная справка. С аргументом выводится дополнительная информация по заданной теме. Если в качестве аргумента указан символ *, команда возвращает справку по синтаксису всех документированных команд SQL.

Команды ввода-вывода

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

  • \copy таблица { FROM | ТО }файл \ stdin | stdout. Команда позволяет скопировать данные, полученные от клиентского приложения (с правами пользователя, запустившего клиента), вместо копирования данных с сервера командой SQL COPY. Поддерживаются все стандартные элементы команды COPY. За дополнительной информацией о синтаксисе обращайтесь к описанию команды COPY (см. главу 14). Следует помнить о принципиальных различиях между командами \copy и COPY:
    • Данные, скопированные командой \copy, сначала передаются через клиентское приложение. При этом скорость копирования оказывается несколько ниже, чем при непосредственном копировании из серверного процесса.
    • Доступ к файлам локальной файловой системы предоставляется с правами учетной записи текущего пользователя. Таким образом, клиент может иметь расширенный (или наоборот, ограниченный) доступ к файлам по сравнению с серверным процессом.
    • Обозначения stdin и stdout (стандартный ввод и вывод) интерпретируются по-разному: в psql они относятся ко входному и выходному потокам. В контексте серверного процесса stdin представляет источник данных команды COPY, a stdout представляет выходной поток запроса.
  • \echo строка. Заданная строка передается в стандартный вывод. Команда часто используется при написании сценариев, поскольку с ее помощью можно включить в вывод сценария данные, не предоставляемые СУБД (например, комментарии).
  • \д [ файл ]. Команда выполнения буфера. Как и символ точки с запятой (:) в конце команды SQL, передает текущее содержимое буфера запроса серверу для обработки. Аргумент позволяет сохранить итоговый набор в заданном файле или передать его следующей программе для дальнейшей обработки.
  • \i файл. Чтение входных данных из файла с заданным именем. Содержимое файла интерпретируется так, словно оно было введено непосредственно в приглашении psql.
  • \1o_export old файл. Экспортирование больших объектов с заданным идентификатором объекта (OID) в локальную файловую систему. Отличается от функции сервера 1o_export() так же, как команда \copy в psql отличается от команды COPY в SQL.
  • \lo_import файл [ комментарий ]. Импортирование больших объектов из локальной файловой системы в базу данных. К объекту можно присоединить необязательный комментарий; это рекомендуется делать, поскольку в противном случае на него можно будет ссылаться только по значению OID, которое придется запоминать для дальнейшего использования. Если присоединить к объекту комментарий, то команда \lo_list выведет комментарий вместе со значением OID объекта, что упростит его поиск после импортирования.
  • \о [ файл \ /команда ]. Перенаправление вывода (например, результатов выборки) в файл или его передача системной команде для дальнейшей обработки. Если аргумент не задан, перенаправление прекращается и происходит восстановление стандартного вывода. Особого внимания заслуживает возможность конвейерной (pipe) передачи вывода системным командам (например, дгер), что позволяет проводить поиск по шаблонам в выходных данных запросов и управляющих команд psql.
  • \р. Вывод текущего содержимого буфера psql. Если с момента выполнения последней команды новые данные не поступали, отображается последняя выполненная команда.
  • \qecho строка. Заданная строка направляется в канал вывода, заданный командой \о (вместо stdout). Команда обычно используется для включения дополнительной информации в выходной поток psql.
  • \w файл \ /команда. Текущий буфер запроса направляется в заданный файл или передается системной команде для дальнейшей обработки.

Системные команды

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

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