postgres#
postgres
postgres — Сервер баз данных Tantor BE
Синтаксис
postgres
[option
...]
Описание
postgres
- это сервер баз данных Tantor BE. Чтобы клиентское приложение могло получить доступ к базе данных, оно подключается (через сеть или локально) к запущенному экземпляру postgres
. Затем экземпляр postgres
запускает отдельный серверный процесс для обработки соединения.
Каждый экземпляр postgres
всегда управляет данными ровно одного кластера баз данных. Кластер баз данных - это набор баз данных, хранящихся в общем месте файловой системы (область “данных”). На одной системе может работать несколько экземпляров postgres
одновременно, при условии, что они используют разные области данных и разные порты для обмена данными (см. ниже). При запуске postgres
необходимо знать местоположение области данных. Местоположение должно быть указано с помощью опции -D
или переменной среды PGDATA
; нет значения по умолчанию. Обычно -D
или PGDATA
указывают непосредственно на каталог области данных, созданный initdb. Другие возможные варианты расположения файлов обсуждаются в Раздел 18.2.
По умолчанию postgres
запускается в
переднем плане и выводит сообщения журнала в стандартный поток ошибок. В
практических приложениях postgres
следует запускать как фоновый процесс, возможно, при загрузке системы.
Команда postgres
также может быть вызвана в однопользовательском режиме. Основное использование этого режима - во время загрузки системы с помощью initdb. Иногда он используется для отладки или восстановления после сбоя; следует отметить, что запуск однопользовательского сервера не является идеальным для отладки сервера, так как реалистичное взаимодействие между процессами и блокировка не происходят. При вызове в однопользовательском режиме из оболочки пользователь может вводить запросы, и результаты будут выводиться на экран, но в форме, которая более полезна для разработчиков, чем для конечных пользователей. В однопользовательском режиме сессийый пользователь будет установлен для пользователя с идентификатором 1, и этому пользователю будут предоставлены неявные привилегии суперпользователя. Этот пользователь на самом деле не обязан существовать, поэтому однопользовательский режим может использоваться для ручного восстановления после определенного вида случайного повреждения системных каталогов.
Опции
postgres
принимает следующие аргументы командной строки. Для подробного обсуждения опций см. Глава 18. Вы можете сэкономить время, набирая большинство из этих опций, настроив файл конфигурации. Некоторые (безопасные) опции также могут быть установлены из подключающегося клиента способом, зависящим от приложения, чтобы применяться только для этой сессии. Например, если переменная среды PGOPTIONS
установлена, то клиенты на основе libpq передадут эту строку серверу, который будет интерпретировать ее как опции командной строки postgres
.
Общее назначение
-B
nbuffers
Устанавливает количество общих буферов, используемых серверными процессами. Значение этого параметра по умолчанию выбирается автоматически initdb. Указание этой опции эквивалентно установке параметра конфигурации shared_buffers.
-c
name
=value
Устанавливает именованный параметр времени выполнения. Конфигурационные параметры, поддерживаемые Tantor BE, описаны в Глава 18. Большинство других параметров командной строки, на самом деле, являются сокращенными формами такого присваивания параметра. Параметр
-c
может появляться несколько раз для установки нескольких параметров.-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. Также возможно передать
-d 0
для конкретной сессии, что предотвратит передачу уровня журнала сервера родительского процессаpostgres
в эту сессию.-D
datadir
Указывает местоположение файлов конфигурации базы данных в файловой системе. См. Раздел 18.2 для получения дополнительной информации.
-e
Устанавливает стиль даты по умолчанию на "Европейский", то есть порядок ввода полей даты - "День-Месяц-Год"
DMY
. Это также приводит к выводу дня перед месяцем в некоторых форматах вывода даты. См. Раздел 8.5 для получения дополнительной информации.-F
Отключает вызовы
fsync
для повышения производительности, но с риском повреждения данных в случае сбоя системы. Указание этой опции эквивалентно отключению параметра конфигурации fsync. Перед использованием обязательно прочтите подробную документацию!-h
hostname
Указывает имя хоста или IP-адрес, на котором
postgres
будет слушать TCP/IP соединения от клиентских приложений. Значение может быть также списком адресов, разделенных запятыми, или*
, чтобы указать прослушивание на всех доступных интерфейсах. Пустое значение указывает на то, что не прослушиваются никакие IP-адреса, в таком случае можно использовать только Unix-доменные сокеты для подключения к серверу. По умолчанию прослушивается только localhost. Указание этой опции эквивалентно установке параметра конфигурации listen_addresses.-i
Позволяет удаленным клиентам подключаться через TCP/IP (соединения в интернет-домене). Без этой опции принимаются только локальные подключения. Эта опция эквивалентна установке
listen_addresses
в*
в файлеpostgresql.conf
или через опцию-h
.Этот параметр устарел, так как он не позволяет использовать полный функционал listen_addresses. Обычно лучше устанавливать
listen_addresses
напрямую.-k
directory
Указывает каталог Unix-доменного сокета, на котором
postgres
будет слушать подключения от клиентских приложений. Значение может быть также списком каталогов, разделенных запятыми. Пустое значение указывает на то, что необходимо не слушать Unix-доменные сокеты, в этом случае можно использовать только TCP/IP сокеты для подключения к серверу. Значение по умолчанию обычно/tmp
, но его можно изменить во время сборки. Указание этой опции эквивалентно установке параметра конфигурации unix_socket_directories.-l
Включает безопасные соединения с использованием SSL. Tantor BE должен быть скомпилирован с поддержкой SSL, чтобы эта опция была доступна. Дополнительную информацию о использовании SSL см. в разделе Раздел 17.9.
-N
max-connections
Устанавливает максимальное количество клиентских подключений, которые будет принимать данный сервер. Значение по умолчанию для этого параметра выбирается автоматически при использовании initdb. Указание этой опции эквивалентно установке параметра конфигурации max_connections.
-p
port
Указывает TCP/IP-порт или расширение локального файла сокета Unix, на котором
postgres
будет слушать подключения от клиентских приложений. По умолчанию используется значение переменной окруженияPGPORT
, или еслиPGPORT
не установлен, то значение, установленное во время компиляции (обычно 5432). Если вы указываете порт, отличный от порта по умолчанию, то все клиентские приложения должны указывать тот же порт с помощью параметров командной строки или переменной окруженияPGPORT
.-s
Выводить информацию о времени выполнения и другую статистику в конце каждой команды. Это полезно для проведения бенчмаркинга или для настройки количества буферов.
-S
work-mem
Определяет базовый объем памяти, который будет использоваться для сортировки и хеш-таблиц, прежде чем прибегать к временным файлам на диске. См. описание параметра конфигурации
work_mem
в Раздел 18.4.1.-V
--version
Выведите версию postgres и завершите работу.
--
name
=value
Устанавливает именованный параметр времени выполнения; это сокращенная форма
-c
.--describe-config
Этот параметр выводит внутренние конфигурационные переменные сервера, описания и значения по умолчанию в формате
COPY
с разделителями табуляции. Он предназначен в основном для использования административными инструментами.-?
--help
Показать справку о командной строке postgres и выйти.
Полу-внутренние параметры
Описанные здесь параметры используются в основном для целей отладки и в некоторых случаях для помощи в восстановлении серьезно поврежденных баз данных. Нет никакой причины использовать их в настройке производственной базы данных. Они перечислены здесь только для использования разработчиками системы Tantor BE. Кроме того, эти параметры могут измениться или быть удалены в будущих версиях без предупреждения.
-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
Задержка в указанное количество секунд происходит при запуске нового серверного процесса после прохождения процедуры аутентификации. Это предназначено для возможности подключения к серверному процессу с помощью отладчика.
Опции для однопользовательского режима
Следующие параметры применяются только в однопользовательском режиме (см. Single-User Mode ниже).
--single
Выбирает режим однопользовательского доступа. Этот параметр должен быть первым аргументом в командной строке.
database
Указывает имя базы данных, к которой будет осуществлен доступ. Этот аргумент должен быть последним в командной строке. Если он не указан, по умолчанию используется имя пользователя.
-E
Сохранять все команды в стандартный вывод перед их выполнением.
-j
Используйте точку с запятой, за которой следуют две новых строки, вместо просто перехода строки, в качестве разделителя командного ввода.
-r
filename
Отправляйте все выводы журнала сервера в
filename
. Этот параметр учитывается только при указании в качестве параметра командной строки.
Окружение
PGCLIENTENCODING
Кодировка символов по умолчанию, используемая клиентами. (Клиенты могут переопределить это индивидуально). Это значение также может быть установлено в конфигурационном файле.
PGDATA
Местоположение каталога данных по умолчанию
PGDATESTYLE
Значение по умолчанию параметра DateStyle во время выполнения. (Использование этой переменной среды устарело).
PGPORT
Порт по умолчанию (желательно установлен в конфигурационном файле)
Диагностика
Сообщение об ошибке, упоминающее semget
или
shmget
, вероятно, указывает на то, что вам нужно настроить ваше
ядро для предоставления достаточного количества общей памяти и семафоров. Для получения
дополнительной информации см. Раздел 17.4. Возможно, вы сможете
отложить перенастройку ядра, уменьшив значение shared_buffers для уменьшения потребления общей памяти
Tantor BE и/или уменьшив значение
max_connections для уменьшения потребления семафоров.
Сообщение об ошибке, указывающее на то, что другой сервер уже работает, следует тщательно проверить, например, с помощью команды
$
ps ax | grep postgres
или
$
ps -ef | grep postgres
в зависимости от вашей системы. Если вы уверены, что никакой конфликтующий сервер не запущен, вы можете удалить упомянутый в сообщении файл блокировки и попробовать снова.
Сообщение об ошибке, указывающее на невозможность привязки к порту, может указывать на то, что этот порт уже используется каким-то другим процессом, не связанным с PostgreSQL. Также можно получить эту ошибку, если вы завершите postgres
и сразу же перезапустите его, используя тот же порт; в этом случае вам просто нужно подождать несколько секунд, пока операционная система не закроет порт, прежде чем попытаться снова. Наконец, вы можете получить эту ошибку, если вы указываете номер порта, который ваша операционная система считает зарезервированным. Например, многие версии Unix считают порты с номерами меньше 1024 "доверенными" и разрешают доступ к ним только суперпользователю Unix.
Примечания
Утилита-команда pg_ctl может быть использована для безопасного и комфортного запуска и остановки сервера postgres
.
Если это возможно, не используйте команду SIGKILL
для завершения работы основного сервера postgres
. Это приведет к тому, что postgres
не освободит системные ресурсы (например, общую память и семафоры), которые он удерживает перед завершением. Это может вызвать проблемы при запуске новой сессии postgres
.
Для нормального завершения сервера postgres
можно использовать сигналы SIGTERM
, SIGINT
или SIGQUIT
. Первый сигнал будет ждать завершения всех клиентов перед выходом, второй принудительно отключит всех клиентов, а третий немедленно завершит работу без правильного выключения, что приведет к запуску процедуры восстановления при перезапуске.
Сигнал SIGHUP
перезагружает файлы конфигурации сервера. Также возможно отправить сигнал SIGHUP
отдельному процессу сервера, но это обычно не имеет смысла.
Чтобы отменить выполняющийся запрос, отправьте сигнал SIGINT
процессу, выполняющему эту команду. Чтобы корректно завершить бэкенд-процесс, отправьте сигнал SIGTERM
этому процессу. См. также функции pg_cancel_backend
и pg_terminate_backend
в разделе Раздел 9.27.2 для SQL-совместимых эквивалентов этих двух действий.
Сервер postgres
использует сигнал SIGQUIT
для указания подчиненным процессам сервера завершиться без нормальной очистки. Этот сигнал не должен использоваться пользователями. Также не рекомендуется отправлять сигнал SIGKILL
процессу сервера - основной процесс postgres
будет интерпретировать это как сбой и принудительно завершит все сопряженные процессы в рамках процедуры восстановления после сбоя.
Ошибки
Опции --
не будут работать в операционных системах FreeBSD или OpenBSD. Вместо этого используйте опцию -c
. Это ошибка в затронутых операционных системах; будущая версия Tantor BE предоставит обходное решение, если это не будет исправлено.
Однопользовательский режим
Для запуска сервера в однопользовательском режиме используйте команду вида
postgres --single -D /usr/local/pgsql/data other-options
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
, чем полагаться на командную строку для установки параметра.