postgres
postgres — Сервер баз данных Postgres Pro
Синтаксис
postgres
[параметр
...]
Описание
postgres
это сервер баз данных Postgres Pro. Для получения доступа к базе данных клиент устанавливает соединение (локально или по сети) с сервером postgres
. После установки соединения сервер postgres
поднимает выделенный процесс для его обслуживания.
Один экземпляр postgres
всегда управляет данными ровно одного кластера баз данных. Кластер — это коллекция баз данных, хранящихся в файловой системе в определённом размещении («области данных»). На одном физическом сервере можно запустить несколько экземпляров postgres
одновременно, при условии, что они используют различные области данных и порты. При запуске postgres
необходимо указать размещение данных, которое задаётся в параметре -D
или переменной окружения PGDATA
, значение по умолчанию отсутствует. Обычно -D
или PGDATA
указывает на каталог, созданный во время развёртывания кластера с помощью initdb. Иные варианты рассмотрены в Разделе 18.2.
По умолчанию postgres
запускается не в фоновом режиме, а вывод журнала осуществляет в стандартный поток ошибок. На практике postgres
должен запускаться в фоновом режиме, возможно, при старте системы.
Команду postgres
также возможно использовать в однопользовательском режиме. В основном этот режим используется на этапе инициализации при выполнении initdb. Иногда он также применяется в целях отладки или после аварийного сбоя. Заметьте, что однопользовательский режим не вполне подходит для отладки сервера ввиду отсутствия в нём межпроцессного взаимодействия и блокировок. Когда сервер запускается в однопользовательском режиме из командной строки, он может принимать запросы и выводить их результаты на экран, но формат этого вывода ориентирован больше на разработчиков, чем на обычных пользователей. В этом режиме текущим пользователем считается пользователь под номером 1, который неявно наделяется правами суперпользователя. При этом данный пользователь может фактически не существовать, поэтому в ряде случаев этот режим даёт возможность вручную восстановить базу при повреждении системных каталогов.
Параметры
Программа postgres
принимает следующие аргументы командной строки. За подробным описанием параметров обратитесь к Главе 18. От необходимости вводить большинство этих параметров можно избавиться, записав их в файл конфигурации. Некоторые (безопасные) параметры можно также задать со стороны подключающегося клиента (в зависимости от приложения), чтобы они применялись только к одному сеансу. Например, если установлена переменная окружения PGOPTIONS
, клиенты на базе libpq передадут эту строку серверу, который воспримет её как параметры, передаваемые в командной строке postgres
.
Параметры общего назначения
-B
количество-буферов
Устанавливает количество разделяемых между процессами буферов. Значение по умолчанию выбирается автоматически при развёртывании кластера с помощью initdb. Установка флага аналогична конфигурации параметра shared_buffers.
-c
имя
=значение
Устанавливает заданный параметр времени исполнения. Конфигурационные параметры, поддерживаемые Postgres Pro, описаны в Главе 18. Большинство других параметров командной строки на самом деле представляют собой краткие формы такого присвоения значений параметрам. Для установления нескольких параметров
-c
можно указывать многократно.-C
имя
Отображает значение заданного параметра времени исполнения и прерывает дальнейшее выполнение (подробнее см. выше). Можно применять на работающем сервере, при этом будут возвращены значения
postgresql.conf
с учётом проведённых в рамках вызова изменений. Значения, переданные при старте кластера, не отображаются.Параметр предназначен для приложений, взаимодействующих с сервером, например pg_ctl, и запрашивающих параметры конфигурации. Пользовательские приложения должны использовать команду SHOW или представление
pg_settings
.-d
уровень-отладки
Устанавливает уровень отладки (от 1 до 5). Чем выше значение, тем подробнее осуществляется вывод в журнал сервера. Также возможно передать
-d 0
для отдельной сессии, что предотвратит в её рамках влияние выставленного дляpostgres
значения.-D
datadir
Указывает размещение конфигурационных файлов базы в пределах файловой системы. За подробностями обратитесь к Разделу 18.2.
-e
Устанавливает формат вводимых дат по умолчанию в «European» с последовательностью значений
DMY
. Также влияет на вывод дня, идущего перед значением месяца, более подробно см. Раздел 8.5.-F
Отключает вызовы
fsync
для увеличения производительности, но с увеличением рисков потери данных в случае краха системы. Этот параметр работает аналогично параметру конфигурации fsync. Внимательно прочтите документацию перед использованием данного параметра!-h
компьютер
Указывает IP-адрес или имя компьютера, на котором сервер
postgres
принимает клиентские подключения по TCP/IP. Значением может быть список адресов, разделённых запятыми, либо символ*
, обозначающий все доступные интерфейсы. Если значение опущено, то подключения принимаются только через Unix-сокеты. По умолчанию принимаются подключения только к localhost. Флаг работает аналогично конфигурационному параметру listen_addresses.-i
Позволяет клиентам подключаться по TCP/IP. Без этого параметра допускаются лишь локальные подключения. Действие этого параметра аналогично действию параметра конфигурации
listen_addresses
со значением*
вpostgresql.conf
или ключа-h
.Параметр устарел, так как не даёт полной функциональности listen_addresses. Лучше устанавливать значение
listen_addresses
напрямую.-k
каталог
Указывает каталог Unix-сокета, через который
postgres
будет принимать подключения. Значением параметра может быть список каталогов через запятую. Если это значение пустое, использование Unix-сокетов запрещается, разрешаются только подключения по TCP/IP. По умолчанию выбирается каталог/tmp
, но его можно сменить на этапе компиляции. Этот параметр действует аналогично параметру конфигурации unix_socket_directories.-l
Включает поддержку безопасных соединений с использованием SSL шифрования. Postgres Pro необходимо скомпилировать с поддержкой SSL для использования этого флага. Подробнее использование SSL описано в Раздел 17.9.
-N
максимальное количество соединений
Устанавливает максимально возможное количество одновременных клиентских соединений. Значение по умолчанию устанавливается автоматически на этапе развёртывания с помощью initdb. Флаг работает аналогично конфигурационному параметру max_connections.
-o
дополнительные-параметры
Аргументы командной строки, поступившие через
дополнительные-параметры
, передаются всем обслуживающим процессам, запускаемым этим процессомpostgres
.Пробелы в строке
дополнительные-параметры
воспринимаются как разделяющие аргументы, если перед ними нет обратной косой черты (\
); чтобы представить обратную косую черту буквально, продублируйте её (\\
). Также можно задать несколько аргументов, используя-o
несколько раз.Использование этого параметра считается устаревшим, так как на данный момент все параметры
postgres
можно задать в командной строке.-p
порт
Указывает порт TCP/IP или расширение файла локального Unix-сокета, через который
postgres
принимает подключения клиентских приложений. По умолчанию принимает значение переменной окруженияPGPORT
, или, если значениеPGPORT
не установлено, то используется значение, установленное на этапе компиляции (обычно это 5432). Если значение порта меняется, то на стороне клиентов это необходимо учитывать, установив, либоPGPORT
, либо флаг командной строки.-s
Отображает информацию о времени и другую статистику после каждой выполненной команды, что полезно для оценки производительности во время настройки количества буферов.
-S
рабочая-память
Указывает объём памяти, который сервер будет использовать для внутренних операций сортировки и хеширования, прежде чем прибегнуть к использованию временных файлов на диске. Обратитесь к описанию параметра
work_mem
, приведённому в Подразделе 18.4.1.-V
--version
Отображает версию postgres и прерывает дальнейшее выполнение.
--
имя
=значение
Устанавливает заданный параметр времени исполнения. Является короткой формой ключа
-c
.--describe-config
Выводит значения конфигурационных переменных сервера, их описаний и значений по умолчанию в формате команды
COPY
со знаком табуляции в качестве разделителя. В основном это предназначено для средств администрирования.-?
--help
Выводит помощь по аргументам команды postgres.
Параметры для внутреннего использования
Далее описанные параметры, в основном, применяются в целях отладки, а в некоторых случаях при восстановлении сильно повреждённых баз данных. Их описание приведено для системных разработчиков Postgres Pro, поэтому они могут быть изменены без уведомления.
-f
{ s | i | o | b | t | n | m | h }
Запрещает использование специфических методов сканирования и объединения:
s
иi
выключают последовательное сканирование и по индексу соответственно, аo
,b
иt
выключает сканирование только по индексу, сканирование по битовым векторам, и сканирование по ID кортежей соответственно, в то время какn
,m
иh
выключает вложенные циклы, слияния и хеширование соответственно.Ни последовательное сканирование, ни вложенные циклы невозможно выключить полностью. Флаги
-fs
и-fn
просто указывают планировщику избегать выполнения этих операций при наличии других альтернатив.-n
Параметр предназначен для отладки сервера в случае аномального завершения процесса. Обычная практика в таком случае — завершение порождённых процессов с дальнейшей инициализацией разделяемой памяти и семафоров. Это связано с тем, что потерянный процесс мог повредить область разделяемой памяти. Параметр указывает
postgres
не производить повторной инициализации общих структур данных, что позволяет произвести дальнейшую отладку текущего состояния памяти и семафоров.-O
Разрешает модифицировать структуру системных таблиц. Используется командой
initdb
.-P
Игнорировать системные индексы при чтении, но продолжать обновлять их при изменениях системных таблиц. Это используется при их восстановлении после повреждения.
-t
pa[rser] | pl[anner] | e[xecutor]
Выводит статистику по времени исполнения каждого запроса в контексте каждого системного модуля. Использование флага совместно с
-s
невозможно.-T
Параметр предназначен для отладки сервера в случае аномального завершения процесса. Обычная практика в таком случае — завершение порождённых процессов с дальнейшей инициализацией разделяемой памяти и семафоров. Это связано с тем, что потерянный процесс мог повредить область разделяемой памяти. Параметр указывает
postgres
на необходимость остановки порождённых процессов сигналомSIGSTOP
, но не завершит их, что позволяет разработчикам сделать снимки памяти процессов.-v
протокол
Указывает для данного сеанса версию протокола взаимодействия сервера с клиентом. Флаг используется лишь для внутренних целей.
-W
секунды
При старте сервера производится задержка на указанное количество секунд, после чего производится процедура аутентификации, что позволяет подключить отладчик к процессу.
Параметры для однопользовательского режима
Следующие параметры применимы только для однопользовательского режима (см. Однопользовательский режим).
--single
Устанавливает однопользовательский режим. Параметр должен идти первым в командной строке.
база_данных
Указывает имя базы данных, к которой производится подключение. Параметр должен идти последним в командной строке. Если не указан, то используется имя текущего системного пользователя.
-E
Выводить все команды в устройство стандартного вывода прежде чем выполнять их.
-j
Считать признаком окончания ввода команды точку с запятой с двумя переводами строки, а не один перевод строки.
-r
имя_файла
Отправляет вывод журнала сервера в файл
filename
. Этот параметр применяется лишь при запуске из командной строки.
Переменные окружения
PGCLIENTENCODING
Кодировка, используемая клиентом по умолчанию. Может переопределяться на стороне клиента, а также устанавливаться в конфигурационном файле сервера.
PGDATA
Каталог размещения данных кластера по умолчанию
PGDATESTYLE
Значение по умолчанию для параметра времени исполнения DateStyle. Применение этой переменной является устаревшим.
PGPORT
Порт по умолчанию, лучше устанавливать в конфигурационном файле.
Диагностика
Ошибки с упоминанием о semget
или shmget
говорят о возможной необходимости проведения более оптимального конфигурирования ядра. Подробнее это обсуждается в Разделе 17.4. Отложить переконфигурирование можно, уменьшив shared_buffers для снижения общего потребления разделяемой памяти Postgres Pro и/или уменьшив max_connections для снижения затрат на использование семафоров.
Необходимо внимательно проверять сообщения об ошибке с упоминанием о другом запущенном экземпляре, например, с использованием команды
$
ps ax | grep postgres
или
$
ps -ef | grep postgres
в зависимости от ОС. Если есть полная уверенность, что противоречий нет, необходимо самостоятельно удалить упомянутый в сообщении запирающий файл и повторить попытку.
Упоминание о невозможности привязки к порту в сообщениях об ошибках может указывать на то, что он уже занят другим процессом помимо Postgres Pro. Также сообщение может возникнуть при мгновенном рестарте postgres
на том же порту. В этом случае нужно немного подождать, пока ОС не закроет порт, и повторить попытку. Ещё возможна ситуация, в которой используется резервный системный порт. Например, многие Unix-подобные ОС резервируют «доверительные» порты от 1024 и ниже, и лишь суперпользователь имеет к ним доступ.
Замечания
Для комфортного запуска и остановки сервера можно использовать утилиту pg_ctl.
Если возможно, не используйте сигнал SIGKILL
для головного процесса postgres
. В этом случае postgres
не освободит системные ресурсы, например, разделяемую память и семафоры. Это может привести к проблемам при повторном запуске postgres
.
Для корректного завершения postgres
используются сигналы SIGTERM
, SIGINT
или SIGQUIT
. При первом будут ожидаться все дочерние процессы до их завершения, второй приведёт к принудительному закрытию соединений, а третий — к незамедлительному выходу без корректного завершения, приводящему к необходимости выполнения процедуры восстановления на следующем старте.
Получая сигнал SIGHUP
, сервер перечитывает свои файлы конфигурации. Также возможно отправить SIGHUP
отдельному процессу, но это ча��е всего бессмысленно.
Для отмены исполняющегося запроса, отправьте SIGINT
обслуживающему его процессу. Для чистого завершения серверного процесса отправьте ему SIGTERM
. Также см. pg_cancel_backend
и pg_terminate_backend
в Подразделе 9.26.2, которые являются аналогами в форме SQL-инструкций.
Сервер postgres
обрабатывает SIGQUIT
для завершения дочерних процессов в грязную, и сигнал не должен отправляться пользователем. Также не стоит посылать SIGKILL
серверному процессу — головной postgres
процесс расценит это как аварию и принудительно завершит остальные порождённые, как это было бы сделано при процедуре восстановления после сбоя.
Ошибки
Флаги, начинающиеся с --
не работают в ОС FreeBSD или OpenBSD. Чтобы обойти это, используйте -c
. Это ошибка ОС. В будущих релизах Postgres Pro будет предоставлен обходной путь, если ошибка так и не будет устранена.
Однопользовательский режим
Для запуска сервера в однопользовательском режиме используется, например, команда
postgres --single -D /usr/local/pgsql/data другие параметры
my_database
Необходимо указать корректный путь к каталогу хранения данных в параметре -D
, или установить переменную окружения PGDATA
. Также замените имя базы данных на необходимое.
Обычно перевод строки в однопользовательском режиме сервер воспринимает как завершение ввода команды; точка с запятой не имеет для него такого значения, как для psql. Поэтому, чтобы ввести команду, занимающую несколько строк, необходимо добавлять в конце каждой строки, кроме последней, обратную косую черту. Обратная косая черта и следующий за ней символ перевода строки автоматически убираются из вводимой команды. Заметьте, что это происходит даже внутри строковой константы или комментария.
Но если применить аргумент командной строки -j
, одиночный символ перевода строки не будет завершать ввод команды; это будет делать последовательность «точка с запятой, перевод строки, перевод строки». То есть для завершения команды нужно ввести точку с запятой, и сразу за ней пустую строку. Просто точка с запятой, дополненная переводом строки, в этом режиме не имеет специального значения. Внутри строковых констант и комментариев такая завершающая последовательность воспринимается в том же ключе.
Вне зависимости от режима ввода, символ точки с запятой, введённый не прямо перед или в составе последовательности завершения команды, воспринимается как разделитель команд. После ввода завершающей последовательности введённые с разделителями несколько операторов будут выполняться в одной транзакции.
Для завершения сеанса введите символ конца файла (EOF, обычно это сочетание Control+D). Если вы вводили текст после окончания ввода последней команды, символ EOF будет воспринят как символ завершения команды, и для выхода потребуется ещё один EOF.
Заметьте, что однопользовательский режим не предоставляет особых возможностей для редактирования команд (например, нет истории команд). Также в о��нопользовательском режиме не производятся никакие фоновые действия, например, не выполняются автоматические контрольные точки или репликация.
Примеры
Для запуска postgres
в фоновом режиме с параметрами по умолчанию:
$
nohup postgres >logfile 2>&1 </dev/null &
Для запуска postgres
с определённым портом, например, 1234:
$
postgres -p 1234
Для соединения с помощью psql укажите этот порт в параметре -p:
$
psql -p 1234
или в переменной окружения PGPORT
:
$
export PGPORT=1234
$
psql
Именованный параметр времени исполнения можно указать одним из приведённых способом:
$
postgres -c work_mem=1234
$
postgres --work-mem=1234
Любой из методов переопределяет значение work_mem
конфигурации postgresql.conf
. Символ подчёркивания в именах можно указать и в виде тире. Задавать параметры обычно (не считая кратковременных экспериментов) лучше в postgresql.conf
, а не в аргументах командной строки.