Перейти к основному содержимому

postgres

примечание

Эта страница переведена при помощи нейросети GigaChat.

postgres — сервер базы данных PostgreSQL.

Синтаксис

postgres [option ...]

Описание

postgres представляет собой серверную часть системы управления базами данных PostgreSQL. Клиентские приложения подключаются к запущенному экземпляру postgres — локально или через сеть — чтобы получить доступ к базе данных. Для каждого такого подключения создается отдельный серверный процесс, который обрабатывает его.

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

При запуске postgres должен знать, где расположена область данных. Это указывается либо с помощью параметра -D, либо через переменную окружения PGDATA, значение по умолчанию не задается. Обычно путь указывает на каталог, созданный ранее командой initdb. Подробнее о вариантах размещения данных можно прочитать в разделе «Расположение файлов».

По умолчанию postgres запускается как фоновый процесс и выводит сообщения журнала в стандартный поток ошибок. На практике его чаще всего запускают в фоновом режиме, например, при старте системы.

Также postgres можно запустить в однопользовательском режиме. Этот режим в основном используется при начальной инициализации (например, через initdb), а также для отладки или восстановления после сбоев. Однако, поскольку в этом режиме не происходит межпроцессного взаимодействия и блокировки, он не подходит для полноценной отладки сервера. В этом режиме пользователь может вводить SQL-запросы прямо в консоли и получать результаты в текстовом виде, ориентированном на разработчиков. Сеанс при этом запускается от имени пользователя с идентификатором 1, которому автоматически предоставляются привилегии суперпользователя, даже если такой пользователь формально не существует. Это позволяет вручную исправлять поврежденные системные каталоги.

Параметры

postgres поддерживает ряд аргументов командной строки. Более подробно они описаны в разделе «Конфигурация сервера». Во многих случаях проще настроить параметры через конфигурационный файл, чем указывать их при каждом запуске. Некоторые параметры могут быть переданы со стороны клиента для применения только в текущем сеансе — например, через переменную окружения PGOPTIONS (в случае клиентов, использующих библиотеку libpq). В этом случае значение переменной интерпретируется как строка параметров для postgres.

Параметры общего назначения

-B nbuffers
Устанавливает количество общих буферов, используемых серверными процессами. Эквивалентно конфигурационному параметру shared_buffers. Значение по умолчанию выбирается автоматически при выполнении initdb.
-c name=value
Задает параметр времени выполнения. Может указываться несколько раз для установки нескольких параметров. Поддерживаемые параметры описаны в разделе «Конфигурация сервера». Большинство других параметров командной строки являются сокращениями для этой формы.
-C name
Выводит значение указанного параметра времени выполнения и завершается (смотрите также описание параметра -c выше). При этом выдаются значения из postgresql.conf с учетом возможных переопределений параметров при вызове. Не отображает параметры, заданные при запуске кластера.

Допускается использование на работающем сервере для большинства параметров. Для некоторых параметров, рассчитываемых при запуске (например, shared_memory_size, shared_memory_size_in_huge_pages и wal_segment_size), требуется остановка сервера.

Предназначается для вспомогательных программ, взаимодействующих с сервером, например, pg_ctl. Для пользовательских приложений рекомендуется использовать команду SHOW или представление pg_settings.

-d debug-level
Устанавливает уровень детализации отладочной информации (от 1 до 5). Значение 0 предотвращает передачу уровня журнала сервера родительского процесса postgres этому сеансу. Чем выше установлено это значение, тем больше отладочной информации записывается в журнал сервера.
-D datadir
Определяет каталог, в котором находятся файлы конфигурации базы данных. Подробнее смотрите в разделе «Расположение файлов».
-e
Устанавливает европейский стиль дат (формат DMY). Также влияет на формат вывода дат.
-F
Отключает вызовы fsync, что повышает производительность, но может привести к потере данных при сбое системы. Эквивалентно отключению параметра конфигурации fsync. Использовать с осторожностью.
-h hostname
Задает имя хоста или IP-адрес, по которому сервер будет принимать TCP/IP подключения. Можно указать несколько адресов через запятую или * для всех интерфейсов. Пустая строка отключает TCP/IP, и в этом случае для подключения к серверу могут использоваться только Unix-сокеты. По умолчанию прослушивание осуществляется только на локальном хосте. Эквивалентен параметру listen_addresses.
-i
Разрешает подключение удаленных клиентов по TCP/IP. Эквивалентен установке listen_addresses=*. Параметр устарел, поскольку он не позволяет получить доступ ко всем функциям listen_addresses — рекомендуется изменить параметр в конфигурации напрямую.
-k directory
Задает каталог для размещения Unix-сокетов, к которому postgres должен подключаться для подключения клиентских приложений. Можно указать несколько путей через запятую. Пустое значение отключает Unix-сокеты, в этом случае для подключения к серверу могут использоваться только сокеты TCP/IP. Значением по умолчанию обычно является /tmp, но это можно изменить во время сборки. Эквивалентен параметру конфигурации unix_socket_directories.
-l
Включает поддержку SSL-соединений. Требуется сборка PostgreSQL с включенной поддержкой SSL. Подробнее — в разделе «Безопасные соединения TCP / IP с использованием SSL».
-N max-connections
Устанавливает максимальное количество одновременных клиентских подключений. Эквивалентен параметру max_connections. Значение по умолчанию устанавливается автоматически с помощью initdb.
-p port
Определяет порт (TCP/IP или Unix-сокет), используемый для подключения клиентов. Если не указано, используется значение переменной окружения PGPORT, либо порт по умолчанию (обычно 5432). Если указать порт, отличный от порта по умолчанию, то все клиентские приложения должны указать один и тот же порт, используя либо параметры командной строки, либо PGPORT.
-s
Выводит информацию о времени и другие статистические данные в конце каждой команды. Полезно при настройке количества буферов и тестировании производительности.
-S work-mem
Устанавливает объем оперативной памяти, выделяемой на операции сортировки и хеширования до использования временных файлов на диске. Эквивалентен параметру work_mem, описание которого представлено в разделе «Память».
-V
--version
Выводит версию postgres и завершается.
--name=value
Устанавливает параметр времени выполнения. Эквивалентен -c.
--describe-config
Выводит список всех внутренних параметров конфигурации сервера, их описания и значения по умолчанию в формате команды COPY со знаком табуляции в качестве разделителя. Используется в основном в административных утилитах.
-?
--help
Показывает справку о параметрах командной строки postgres и завершается.

Параметры для внутреннего использования

Эти параметры применяются в основном для отладки и в некоторых случаях — для восстановления сильно поврежденных баз данных. Использование их в продуктивной среде не рекомендуется. Они приведены исключительно для разработчиков PostgreSQL и могут быть изменены или удалены в будущих версиях без предварительного уведомления.

-f { s | i | o | b | t | n | m | h }
Запрещает использование указанных методов сканирования и соединения. Параметры s и i отключают последовательное сканирование и сканирование по индексу соответственно, o, b и t — сканирование только по индексу, битовое сканирование и сканирование по TID, а n, m и h — соединения вложенными циклами, слиянием и хеш-соединения соответственно.

Полностью отключить последовательные сканирования и соединения вложенными циклами невозможно; параметры -fs и -fn лишь снижают их приоритет в оптимизаторе.

-O
Разрешает изменение структуры системных таблиц. Применяется, в частности, при инициализации с помощью initdb.
-P
Игнорирует системные индексы при чтении системных таблиц, но продолжает обновлять их при изменениях. Полезен для восстановления после повреждения системных индексов.
-t pa[rser] | pl[anner] | e[xecutor]
Выводит статистику времени выполнения запросов для каждого запроса, относящегося к каждому из основных системных модулей. Несовместим с параметром -s.
-T
Данная опция предназначена для отладки проблем, приводящих к ненормальному завершению процесса сервера. Обычная стратегия в такой ситуации заключается в уведомлении всех других процессов сервера о том, что им следует завершиться, путем отправки сигнала SIGQUIT. С этой опцией вместо этого отправляется сигнал SIGABRT, результатом чего является создание файлов дампа ядра.
-v protocol
Указывает номер версии протокола взаимодействия клиент-сервер, используемый в текущем сеансе. Предназначен для внутреннего использования.
-W seconds
Задерживает запуск нового серверного процесса на указанное число секунд после прохождения аутентификации. Позволяет подключиться к процессу с отладчиком.

Параметры для однопользовательского режима

Следующие параметры применяются только при запуске PostgreSQL в однопользовательском режиме (смотрите раздел «Однопользовательский режим» ниже).

--single
Включает однопользовательский режим. Должен быть указан первым в командной строке.
database
Указывает имя базы данных, к которой нужно подключиться. Должен быть последним аргументом в командной строке. Если не указан — используется имя текущего пользователя.
-E
Включает вывод всех выполняемых команд на стандартный вывод.
-j
Использует в качестве разделителя ввода команд точку с запятой, за которой следуют две новые строки, вместо одной новой строки.
-r filename
Перенаправляет весь журнал сервера в указанный файл filename. Учитывается только при передаче в командной строке.

Переменные окружения

Утилита поддерживает переменные окружения:

PGCLIENTENCODING
Определяет кодировку символов, используемую клиентом по умолчанию. Каждый клиент может переопределить это значение. Также возможно указание этого параметра в конфигурационном файле.
PGDATA
Указывает путь к каталогу данных по умолчанию.
PGDATESTYLE
Значение по умолчанию для параметра конфигурации DateStyle. Использование этой переменной среды считается устаревшим.
PGPORT
Порт, на котором сервер ожидает соединений по умолчанию. Рекомендуется задавать это значение в конфигурационном файле.

Диагностика

Если в сообщении об ошибке упоминается semget или shmget, это, скорее всего, означает, что настройки ядра системы не обеспечивают достаточного объема общей памяти или семафоров. Подробнее об этом читайте в разделе «Управление ресурсами ядра». Чтобы временно избежать перенастройки ядра, можно уменьшить значение shared_buffers (для снижения потребления общей памяти) и/или сократить max_connections (чтобы уменьшить количество используемых семафоров).

Ошибка, указывающая на возможный запуск другого экземпляра сервера, требует проверки. Это можно сделать с помощью одной из следующих команд:

$ ps ax | grep postgres

или

$ ps -ef | grep postgres

в зависимости от используемой операционной системы. При отсутствии запущенного процесса можно удалить указанный в сообщении файл блокировки и повторить запуск.

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

Примечания

Для управления запуском и остановкой сервера рекомендуется использовать утилиту pg_ctl.

Не рекомендуется завершать работу основного процесса postgres с помощью сигнала SIGKILL, поскольку в этом случае postgres не освободит системные ресурсы, например, разделяемую память и семафоры, и это затруднит повторный запуск сервера.

Поддерживаются следующие сигналы завершения:

  • SIGTERM — корректное завершение с ожиданием завершения клиентских соединений;
  • SIGINT — принудительное отключение клиентов;
  • SIGQUIT — немедленное завершение без сохранения, может потребовать восстановления при следующем запуске.

Сигнал SIGHUP используется для перезагрузки конфигурационных файлов. Его также можно применить к отдельным серверным процессам, но это, как правило, не требуется.

Для отмены выполняемого запроса используется сигнал SIGINT, а для завершения серверного процесса — SIGTERM. Аналогичное поведение можно получить с помощью SQL-функций pg_cancel_backend и pg_terminate_backend.

Сервер использует SIGQUIT для аварийного завершения дочерних процессов. Этот сигнал не предназначен для использования вне внутреннего механизма сервера. Применение SIGKILL также не рекомендуется, поскольку оно расценивается как сбой и инициирует аварийное завершение всех процессов сервера.

Ошибки

На операционных системах FreeBSD и OpenBSD могут не поддерживаться параметры, начинающиеся с --. Вместо них следует использовать синтаксис -c. Это связано с ограничениями указанных операционных систем. В будущих версиях PostgreSQL планируется реализация обходного решения.

Однопользовательский режим

Сервер PostgreSQL можно запустить в однопользовательском режиме, выполнив команду:

postgres --single -D /usr/local/pgsql/data other-options my_database

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

В однопользовательском режиме символ новой строки по умолчанию рассматривается как завершение команды. Символы ; не используются для разделения операторов, как это происходит в psql. Чтобы перенести команду на следующую строку, необходимо завершать каждую строку, кроме последней, обратной косой чертой (\). Такая последовательность удаляется из ввода, даже если находится внутри строкового литерала или комментария.

При использовании параметра -j поведение меняется: одна новая строка больше не завершает команду. Ввод считается завершенным, когда встречается последовательность: точка с запятой, пустая строка, затем еще одна пустая строка. В этом режиме обратная косая черта перед новой строкой не интерпретируется как продолжение строки. Просто точка с запятой, дополненная переводом строки, в этом режиме не имеет специального значения. Все команды, введенные до терминатора, будут выполнены как одна транзакция.

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

Завершить сеанс можно через ввод EOF (обычно Ctrl+D). Если вводить текст после окончания ввода последней команды, символ EOF будет воспринят как символ завершения команды, и для выхода потребуется еще один EOF.

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

Примеры

Запуск сервера postgres в фоновом режиме, используя значения по умолчанию:

$ nohup postgres >logfile 2>&1 </dev/null &

Запуск на определенном порту, например 1234:

$ postgres -p 1234

Подключение к серверу с помощью psql через указанный порт:

$ psql -p 1234

или через установку переменной окружения PGPORT:

$ export PGPORT=1234
$ psql

Назначение параметров времени выполнения может производиться в различных форматах:

$ postgres -c work_mem=1234
$ postgres --work-mem=1234

Любой из вариантов переопределяет соответствующее значение в postgresql.conf. В командной строке допускается использование как подчеркиваний, так и дефисов в названиях параметров. Для постоянных изменений рекомендуется использовать postgresql.conf, а не временные параметры командной строки.

Смотрите также

initdb, pg_ctl