01 Занятие 01: Обзор базового инструментария / Установка и управление, psql
Эта страница извлечена из официального PDF в нативный Markdown. Текст слайдов, код и комментарии сохранены в порядке чтения; исходные PDF и HTML остаются эталоном макета. HTML source: dev1_01_tools_overview.html Archive: DEV1-handouts-16.zip Страниц PDF: 20
Page 1: Обзор базового инструментария / Установка и управление, psql
Авторские права
© Postgres Professional, 2017–2024 Авторы: Егор Рогов, Павел Лузанов, Илья Баштанов, Игорь Гнатюк Фото: Олег Бартунов (монастырь Пху и пик Бхрикути, Непал)
Использование материалов курса
Некоммерческое использование материалов курса (презентации, демонстрации) разрешается без ограничений. Коммерческое использование возможно только с письменного разрешения компании Postgres Professional. Запрещается внесение изменений в материалы курса.
Обратная связь
Отзывы, замечания и предложения направляйте по адресу: edu@postgrespro.ru
Отказ от ответственности
Компания Postgres Professional не несет никакой ответственности за любые повреждения и убытки, включая потерю дохода, нанесенные прямым или непрямым, специальным или случайным использованием материалов курса. Компания Postgres Professional не предоставляет каких-либо гарантий на материалы курса. Материалы курса предоставляются на основе принципа «как есть» и компания Postgres Professional не обязана предоставлять сопровождение, поддержку, обновления, расширения и изменения.
Page 2: Темы
- Варианты установки PostgreSQL
- Управление сервером
- Журнал сообщений сервера
- Настройка параметров конфигурации
- Использование psql
Page 3: Кластер БД, сервер, клиент
{#source-figure-003 caption=“Source slide page 3: Кластер БД, сервер, клиент”}
- клиент
Комментарии преподавателя
Начнем с основных понятий.
PostgreSQL — программа, которая относится к классу систем управления базами данных.
Когда эта программа выполняется, мы называем ее сервером PostgreSQL или экземпляром сервера. Пока сервер представляется для нас «черным ящиком», но постепенно мы познакомимся с тем, как он устроен.
Данные, которыми управляет PostgreSQL, хранятся в базах данных. Один экземпляр PostgreSQL одновременно работает с несколькими базами данных. Этот набор баз данных называется кластером баз данных. Подробнее мы будем говорить о базах данных в теме «Организация данных. Логическая структура».
С сервером взаимодействуют клиенты — внешние приложения, которые могут подключаться к одной из баз сервера и посылать запросы для выполнения.
Итак: кластер баз данных — это данные в файлах; сервер или экземпляр сервера — программа, управляющая кластером баз данных, а клиент — программа, позволяющая «общаться» с сервером.
Page 4: Установка
Варианты
- готовые пакеты (предпочтительный способ)
- установка из исходных кодов
- без установки — облачные сервисы
- Расширения
- дополнительный функционал
- устанавливаются отдельно
- в поставке с сервером — модули и программы (~50 штук)
Комментарии преподавателя
Предпочтительный вариант установки PostgreSQL — использование пакетных менеджеров (таких, как apt или rpm) и готовых пакетов. В этом случае получается понятная, поддерживаемая и легко обновляемая установка. Пакеты существуют для большинства операционных систем.
Другой вариант — самостоятельная сборка PostgreSQL из исходных кодов. Это может понадобиться для установки нестандартных значений параметров или при использовании непопулярной платформы.
Готовые пакеты и исходные коды: http://www.postgresql.org/download/
Кроме того, можно использовать готовые облачные решения, что позволяет обойтись вообще без установки. Такую возможность дают многие ведущие зарубежные (Amazon RDS, Google Cloud SQL, Microsoft Azure) и отечественные (Yandex Cloud, Облако Mail.ru) платформы.
В курсе мы будем использовать виртуальную машину с ОС Xubuntu и сервер PostgreSQL 16, установленный из пакета для этой ОС. В этом случае сразу настраивается автоматический запуск и останов сервера PostgreSQL при запуске и останове операционной системы.
Для PostgreSQL существует большое количество расширений, которые подключают новый функционал к СУБД «на лету», без изменения ядра системы. В состав дистрибутива входит 50 расширений.
https://postgrespro.ru/docs/postgresql/16/contrib
https://postgrespro.ru/docs/postgresql/16/contrib-prog
Список доступных расширений и статус их установки можно посмотреть в представлении pg_available_extensions.
Page 5: Управление сервером
Утилита для управления
- pg_ctlcluster
- pg_ctl
- Основные задачи
- запуск сервера
- останов сервера
- обновление параметров конфигурации
Комментарии преподавателя
К основным операциям управления сервером относятся начальная инициализация кластера баз данных, запуск и останов сервера, обновление конфигурации и некоторые другие. Для выполнения этих действий предназначена утилита pg_ctl, входящая в состав PostgreSQL.
В пакетном дистрибутиве для Ubuntu доступ к утилите pg_ctl осуществляется не напрямую, а через специальную обертку pg_ctlcluster. Справку по использованию pg_ctlcluster можно получить командой:
$ man pg_ctlcluster
Также можно получить информацию об установленных кластерах и их текущем состоянии при помощи команд:
$ pg_lsclusters
$ pg_ctlcluster status
Более подробная информация об управлении сервером для администраторов баз данных:
https://postgrespro.ru/docs/postgresql/16/app-pg-ctl
https://postgrespro.ru/docs/postgresql/16/runtime
Page 6: Установка и управление
В виртуальной машине курса установка выполнена из пакета. Каталог установки PostgreSQL:
Владелец ПО сервера — пользователь root. Кластер баз данных автоматически инициализируется при установке из пакета и находится в каталоге /var/lib/postgresql/16/main. В последующих темах мы будем ссылаться на этот каталог как PGDATA, по имени переменной ОС, которую можно установить для использования в некоторых утилитах сервера. Владельцем каталога является пользователь postgres. Вот содержимое каталога:
При установке из пакета в настройки запуска ОС добавляется автоматический запуск PostgreSQL. Поэтому после загрузки операционной системы отдельно стартовать PostgreSQL не нужно. Можно явным образом управлять сервером с помощью следующих команд, которые выдаются от имени привилегированного пользователя ОС через sudo: Остановить сервер:
Запустить сервер:
Перезапустить:
Обновить конфигурацию:
Получить информацию о сервере:
Список установленных экземпляров (можно без sudo):
Page 7: Page 7
Page 8: Журнал сообщений
В журнал записываются
- служебные сообщения сервера
- сообщения пользовательских сеансов
- сообщения приложений
- Настройка журнала
- расположение
- формат записей
- какие события регистрировать
Комментарии преподавателя
Информация о ходе работы СУБД записывается в журнал сообщений сервера. Сюда попадают сведения о запуске и останове сервера, различная служебная информация, в том числе сообщения о возникающих проблемах.
Также сюда могут выводиться сообщения о выполняющихся командах и времени их работы, о возникающих блокировках и тому подобное. Это позволяет выполнять трассировку пользовательских сеансов.
Разработчики приложений могут формировать и записывать в журнал сервера свои собственные сообщения.
Настройки PostgreSQL позволяют гибко определять, какие именно сообщения и в каком формате должны попадать в журнал сервера.
Например, вывод в форматах csv и json удобен для автоматизации анализа журнала.
https://postgrespro.ru/docs/postgresql/16/runtime-config-logging
Page 9: Журнал сообщений сервера
Журнал сообщений сервера находится здесь:
Заглянем в конец журнала:
Page 10: Параметры конфигурации
Для всего экземпляра
- основной файл параметров — postgresql.conf
- Для текущего сеанса
- Просмотр текущего значения
Комментарии преподавателя
Сервер PostgreSQL настраивается с помощью разнообразных параметров конфигурации, которые позволяют управлять ресурсами, настраивать служебные процессы и пользовательские сеансы, управлять журналом сервера и решать многие другие задачи. Поэтому нужно знать, как проверить текущие значения параметров и установить новые.
Настройки всего сервера обычно задаются в конфигурационных файлах. Основной конфигурационный файл — postgresql.conf, он редактируется вручную. Второй конфигурационный файл — postgresql.auto.conf — предназначен для изменения специальной командой ALTER SYSTEM. Параметры, установленные через ALTER SYSTEM, имеют приоритет над параметрами в postgresql.conf.
Директивы включения файлов и каталогов include и include_dir позволяют разделять сложные файлы postgresql.conf на части. Это может быть удобно, например, при управлении несколькими серверами с похожими конфигурациями.
Большинство параметров конфигурации допускает изменение значений в пользовательских сеансах прямо во время выполнения. Помимо системных, можно определять и пользовательские параметры и работать с ними с помощью этих же команд и функций.
Варианты установки и управления параметрами: https://postgrespro.ru/docs/postgresql/16/config-setting Текущие значения параметров доступны в представлении pg_settings: https://postgrespro.ru/docs/postgresql/16/view-pg-settings
Page 11: Параметры конфигурации
Основной файл конфигурации postgresql.conf расположен в этом каталоге:
Здесь же находятся и другие конфигурационные файлы. Проверим значение параметра work_mem:
Параметр work_mem задает объем памяти, который будет использоваться для внутренних операций сортировки и размещения хеш-таблиц, прежде чем будут задействованы временные файлы на диске. 4MB — это значение по умолчанию и оно слишком мало. Допустим, мы хотим увеличить его до 16MB для всего экземпляра. Для этого есть различные пути. Во-первых, можно внести изменение в postgresql.conf, раскомментировав и изменив строку, где определяется параметр:
Во-вторых, можно поместить определение параметра в файл с суффиксом .conf в каталоге /etc/postgresql/16/main/conf.d или в пользовательский файл конфигурации, местоположение которого следует задать в директиве include основного конфигурационного файла postgresql.conf. В-третьих, можно изменить значение параметра с помощью команды SQL — что мы и сделаем:
Такое изменение попадает не в postgresql.conf, а в файл postgresql.auto.conf, который находится в каталоге PGDATA:
Чтобы изменение вступило в силу, нужно перечитать конфигурационные файлы. Для этого можно воспользоваться pg_ctlcluster, либо использовать функцию SQL:
Убедимся, что новое значение параметра применилось. Кроме команды SHOW, можно сделать это таким образом:
Чтобы восстановить значение параметра по умолчанию, достаточно вместо SET использовать команду RESET (и, конечно, перечитать конфигурационные файлы):
Page 12: Page 12
Большинству параметров можно установить новое значение для текущего сеанса прямо во время его выполнения. Например, если мы собираемся выполнить запрос, сортирующий большой объем данных, то для сеанса можно увеличить значение work_mem:
Новое значение действует только в текущем сеансе или даже в текущей транзакции (при указании SET LOCAL). Еще один способ проверить текущее значение — выполнить запрос к представлению:
Можно увидеть значение параметра и с помощью команды \dconfig:
Page 13: Клиент psql
Терминальный клиент для работы с PostgreSQL
- Поставляется вместе с СУБД
- Используется администраторами и разработчиками для интерактивной работы и выполнения скриптов
Комментарии преподавателя
Для работы с СУБД PostgreSQL существуют различные сторонние инструменты, рассмотрение которых не входит в рамки курса.
В курсе мы будем использовать терминальный клиент psql:
psql — это единственный клиент, поставляемый вместе с СУБД.
Навыки работы c psql пригодятся разработчикам и администраторам вне зависимости от того, с каким инструментом они будут работать.
Для интерактивной работы в psql встроена поддержка readline, программ постраничного просмотра результатов запросов (таких, как less и pspg), а также подключения внешних редакторов. Возможности psql позволяют взаимодействовать с ОС, просматривать содержимое системного каталога, создавать скрипты для автоматизации повторяющихся задач.
https://postgrespro.ru/docs/postgresql/16/app-psql
Page 14: Подключение
При запуске psql нужно указать параметры подключения. К обязательным параметрам относятся: имя базы данных, по умолчанию совпадает с именем пользователя; имя пользователя (роль), по умолчанию совпадает с именем пользователя ОС; узел (host), по умолчанию — локальное соединение; порт, по умолчанию — обычно 5432. Параметры указываются так:
Настройки, сделанные в виртуальной машине курса, позволяют подключаться к PostgreSQL без указания параметров:
Проверим текущее подключение:
Команда \connect выполняет новое подключение, не покидая psql. Ее можно сократить до \c. Мы будем указывать необязательную часть имени команды в квадратных скобках: \c[onnect].
Справочная информация
Справку по psql можно получить не только в документации, но и прямо в системе. Команда
выдает справку по запуску. А если PostgreSQL устанавливался с документацией, то справочное руководство можно получить командой
Утилита psql умеет выполнять команды SQL и свои собственные команды, которые начинаются с обратной косой черты, как \conninfo. Команды psql всегда однострочные — в отличие от команд SQL. Внутри psql есть возможность получить список и краткое описание его собственных команд: \? выдает список команд psql, \h[elp] выдает список команд SQL, которые поддерживает сервер, а также синтаксис конкретной команды SQL.
Форматирование вывода
Клиент psql умеет выводить результаты запросов в разных форматах: формат с выравниванием значений; формат без выравнивания; расширенный формат. Формат с выравниванием используется по умолчанию:
Ширина столбцов выровнена по значениям. Также выводится строка заголовков и итоговая строка. Команды psql для переключения режима выравнивания: \a — переключатель режима: с выравниванием/без выравнивания. \t — переключатель отображения строки заголовка и итоговой строки. Отключим выравнивание, заголовок и итоговую строку:
Page 15: Page 15
Такой формат неудобен для просмотра, но может оказаться полезным для автоматической обработки результатов. Расширенный формат удобен, когда нужно вывести много столбцов для одной или нескольких записей. Для этого вместо точки с запятой указываем в конце команды \gx:
Если расширенный формат нужен не для одной команды, а постоянно, можно включить его переключателем \x. Все возможности форматирования результатов запросов доступны через команду \pset.
Взаимодействие с ОС и выполнение скриптов
Из psql можно выполнять команды shell:
С помощью запроса SQL можно сформировать несколько других запросов SQL и записать их в файл, используя команду \o[ut]:
На экран (в стандартный вывод) ничего не попало. Посмотрим в файле:
Вернем вывод на экран и восстановим форматирование по умолчанию.
Выполним теперь эти команды из файла с помощью \i[nclude]:
Есть и другие способы выполнить команды, в том числе из файлов. После выполнения команд сеанс psql будет завершен: psql < имя_файла psql -f имя_файла psql -c ‘команда’ (работает только для одной команды)
Переменные psql
По аналогии с shell, psql имеет собственные переменные. Установим переменную:
Page 16: Page 16
Чтобы подставить значение переменной, надо предварить ее имя двоеточием:
Значение переменной можно сбросить:
Переменные можно использовать, например, для хранения текста часто используемых запросов. Вот запрос на получение списка пяти самых больших по размеру таблиц:
Для выполнения запроса достаточно набрать:
Присвоение значения переменной top5 удобно записать в стартовый файл .psqlrc в домашнем каталоге пользователя. Команды из .psqlrc будут автоматически выполняться каждый раз при старте psql. Без параметров \set выдает значения всех переменных, включая встроенные. Справку по встроенным переменным можно получить так:
Выйти из psql можно с помощью команд \q[uit], quit, exit или нажав Ctrl+D:
Page 17: Итоги
Установка PostgreSQL из готовых пакетов — предпочтительный способ установки
- Пакетные дистрибутивы учитывают особенности ОС, которые нужно знать
- как запускать и останавливать сервер
- расположение файлов конфигурации
- расположение журнала сервера
- psql — клиент для работы с PostgreSQL
Page 18: Практика
- Установите для всех сеансов значение параметра work_mem равным 8 Мбайт. Обновите конфигурацию и проверьте, что изменения вступили в силу. Восстановите значение по умолчанию. 2. Запишите в файл ddl.sql команду CREATE TABLE на создание любой таблицы. Запишите в файл populate.sql команды на вставку строк в эту таблицу. Выполните оба скрипта и проверьте, что таблица создалась и в ней появились записи. 3. Найдите в журнале сервера строки за сегодняшний день.
Комментарии преподавателя
Для запуска psql в окне терминала наберите psql без параметров:
Для выполнения заданий каждой темы удобно создавать отдельную базу данных:
Воспользуйтесь командой ALTER SYSTEM.
Если результат запроса не помещается в окно терминала, psql передает его утилите less для постраничной выдачи. Чтобы вернуться в режим ввода команд, нажмите клавишу q.
Page 19: 1. Параметры конфигурации
Подключаемся к базе данных:
Задаем значение параметра:
Обновляем конфигурацию:
Проверяем значение параметра:
Вернем значение по умолчанию:
Применяем изменения:
2. Выполнение скриптов в psql
Запишем в файл ddl.sql команду на создание таблицы с ключевыми словами PostgreSQL (для этого можно использовать и любой текстовый редактор):
Запишем команды для заполнения таблицы keywords в файл populate.sql:
Создаем базу данных и подключаемся к ней:
Выполняем скрипты и проверяем записи в таблице:
Page 20: Page 20
3. Просмотр журнала
Журнал можно открыть любым текстовым редактором. Каждая запись в журнале начинается с даты, содержит номер серверного процесса (таковы настройки журнала после установки из пакета) и может состоять из нескольких строк. Последние записи будут в конце файла.
Созданную нами базу можно удалить, предварительно отключившись от нее (подробности будут в модуле «Организация данных»)