postgres#

postgres

postgres

postgres — Сервер баз данных Tantor SE

Синтаксис

postgres [option...]

Описание

postgres - это сервер баз данных Tantor SE. Чтобы клиентское приложение могло получить доступ к базе данных, оно подключается (через сеть или локально) к запущенному экземпляру postgres. Затем экземпляр postgres запускает отдельный серверный процесс для обработки соединения.

Каждый экземпляр postgres всегда управляет данными ровно одного кластера баз данных. Кластер баз данных - это набор баз данных, хранящихся в общем месте файловой системы (область данных). На одной системе может работать несколько экземпляров postgres одновременно, при условии, что они используют разные области данных и разные порты для обмена данными (см. ниже). При запуске postgres необходимо знать местоположение области данных. Местоположение должно быть указано с помощью опции -D или переменной среды PGDATA; нет значения по умолчанию. Обычно -D или PGDATA указывают непосредственно на каталог области данных, созданный initdb. Другие возможные варианты расположения файлов обсуждаются в Раздел 19.2.

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

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

Опции

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

Общее назначение

-B nbuffers

Устанавливает количество общих буферов, используемых серверными процессами. Значение этого параметра по умолчанию выбирается автоматически initdb. Указание этой опции эквивалентно установке параметра конфигурации shared_buffers.

-c name=value

Устанавливает именованный параметр времени выполнения. Конфигурационные параметры, поддерживаемые Tantor SE, описаны в Глава 19. Большинство других параметров командной строки, на самом деле, являются сокращенными формами такого присваивания параметра. Параметр -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

Указывает местоположение файлов конфигурации базы данных в файловой системе. См. Раздел 19.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 SE должен быть скомпилирован с поддержкой SSL, чтобы эта опция была доступна. Дополнительную информацию о использовании SSL см. в разделе Раздел 18.9.

-N max-connections

Устанавливает максимальное количество клиентских подключений, которые будет принимать данный сервер. Значение по умолчанию для этого параметра выбирается автоматически при использовании initdb. Указание этой опции эквивалентно установке параметра конфигурации max_connections.

-p port

Указывает TCP/IP-порт или расширение локального файла сокета Unix, на котором postgres будет слушать подключения от клиентских приложений. По умолчанию используется значение переменной окружения PGPORT, или если PGPORT не установлен, то значение, установленное во время компиляции (обычно 5432). Если вы указываете порт, отличный от порта по умолчанию, то все клиентские приложения должны указывать тот же порт с помощью параметров командной строки или переменной окружения PGPORT.

-s

Выводить информацию о времени выполнения и другую статистику в конце каждой команды. Это полезно для проведения бенчмаркинга или для настройки количества буферов.

-S work-mem

Определяет базовый объем памяти, который будет использоваться для сортировки и хеш-таблиц, прежде чем прибегать к временным файлам на диске. См. описание параметра конфигурации work_mem в Раздел 19.4.1.

-V
--version

Выведите версию postgres и завершите работу.

--name=value

Устанавливает именованный параметр времени выполнения; это сокращенная форма -c.

--describe-config

Этот параметр выводит внутренние конфигурационные переменные сервера, описания и значения по умолчанию в формате COPY с разделителями табуляции. Он предназначен в основном для использования административными инструментами.

-?
--help

Показать справку о командной строке postgres и выйти.

Полу-внутренние параметры

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

-f { s | i | o | b | t | n | m | h }

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

Не существует возможности полностью отключить последовательные сканирования или соединения вложенным циклом; опции -fs и -fn просто отклоняют оптимизатор от использования этих типов планов, если у него есть альтернатива.

-n

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

-O

Позволяет изменять структуру системных таблиц. Это используется командой initdb.

-P

Игнорировать системные индексы при чтении системных таблиц, но все же обновлять индексы при изменении таблиц. Это полезно при восстановлении поврежденных системных индексов.

-t pa[rser] | pl[anner] | e[xecutor]

Вывод статистики времени выполнения для каждого запроса, относящегося к каждому из основных системных модулей. Эта опция не может быть использована вместе с опцией -s.

-T

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

-v protocol

Указывает номер версии протокола клиент/сервер, который будет использоваться для конкретной сессии. Этот параметр предназначен только для внутреннего использования.

-W seconds

Задержка в указанное количество секунд происходит при запуске нового серверного процесса после прохождения процедуры аутентификации. Это предназначено для возможности подключения к серверному процессу с помощью отладчика.

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

Следующие параметры применяются только в однопользовательском режиме (см. Single-User Mode ниже).

--single

Выбирает режим однопользовательского доступа. Этот параметр должен быть первым аргументом в командной строке.

database

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

-E

Сохранять все команды в стандартный вывод перед их выполнением.

-j

Используйте точку с запятой, за которой следуют две новых строки, вместо просто перехода строки, в качестве разделителя командного ввода.

-r filename

Отправляйте все выводы журнала сервера в filename. Этот параметр учитывается только при указании в качестве параметра командной строки.

Окружение

PGCLIENTENCODING

Кодировка символов по умолчанию, используемая клиентами. (Клиенты могут переопределить это индивидуально). Это значение также может быть установлено в конфигурационном файле.

PGDATA

Местоположение каталога данных по умолчанию

PGDATESTYLE

Значение по умолчанию параметра DateStyle во время выполнения. (Использование этой переменной среды устарело).

PGPORT

Порт по умолчанию (желательно установлен в конфигурационном файле)

Диагностика

Сообщение об ошибке, упоминающее semget или shmget, вероятно, указывает на то, что вам нужно настроить ваше ядро для предоставления достаточного количества общей памяти и семафоров. Для получения дополнительной информации см. Раздел 18.4. Возможно, вы сможете отложить перенастройку ядра, уменьшив значение shared_buffers для уменьшения потребления общей памяти Tantor SE и/или уменьшив значение 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 SE предоставит обходное решение, если это не будет исправлено.

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

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

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, чем полагаться на командную строку для установки параметра.

См. также

initdb, pg_ctl