Перед обеспечением доступа пользователей к базе данных необходимо запустить сервер баз данных. Программа сервера баз данных называется
postgres.
В случае использования пакетной версии Digital Q.DataBase, в ней предусмотрены средства для запуска сервера в качестве фоновой задачи в соответствии с соглашениями используемой операционной системы. Использование инфраструктуры пакета для запуска сервера потребует значительно меньше усилий, чем самостоятельная реализация данного процесса. Для получения подробных сведений рекомендуется обратиться к документации соответствующего пакета.
Минимальный способ запустить сервер вручную заключается в вызове
postgres напрямую с указанием расположения каталога данных через ключ -D , например:
$ postgres -D /usr/local/pgsql/data
в результате чего сервер останется запущенным в интерактивном режиме. Данное действие должно
выполняться из-под Digital Q.DataBase учетной записи
пользователя. Без указания ключа -Dсервер попытается использовать
каталог данных, определенный переменной окружения PGDATA.
Если данная переменная также не задана, запуск завершится ошибкой.
Как правило, предпочтительнее запускать postgres в фоновом
режиме. Для этого следует использовать стандартный синтаксис оболочки Unix:
$ postgres -D /usr/local/pgsql/data >logfile 2>&1 &
Важно сохранять стандартный вывод stdout и вывод ошибок stderr сервера, как продемонстрировано выше. Это необходимо для целей аудита и диагностики проблем. (См. Раздел 3.9.3 для более подробного обсуждения обработки файлов журналов.)
Программа postgres также принимает ряд других
параметров командной строки. Для получения дополнительной информации см.
postgres страницу справочного руководства
и Глава 3.4 ниже.
Использование такого синтаксиса оболочки может быть неудобным. Поэтому для упрощения некоторых задач предусмотрена вспомогательная программа pg_ctl . Например:
pg_ctl start -l logfile
запустит сервер в фоновом режиме и направит вывод в указанный файл журнала. Параметр -D имеет здесь то же значение, что и для postgres. pg_ctl
также позволяет выполнять остановку сервера.
Как правило, сервер баз данных рекомендуется запускать при загрузке операционной системы.
Скрипты автозапуска зависят от конкретной операционной системы.
Несколько примеров скриптов поставляется вместе с
Digital Q.DataBase в директории
contrib/start-scripts директории. Для установки потребуются привилегии root.
В различных системах приняты разные соглашения по запуску демонов при загрузке системы. Во многих системах имеется файл
/etc/rc.local или
/etc/rc.d/rc.local. В других используются init.d или
rc.d директории. Независимо от способа, сервер должен запускаться от имени Digital Q.DataBase учетной записи пользователя
, а не от имени root или любого другого пользователя. Поэтому команды рекомендуется формировать с использованием
su postgres -c '...'. Например:
su postgres -c 'pg_ctl start -D /usr/local/pgsql/data -l serverlog'
Во время работы сервера его
PID хранится в файле
postmaster.pid в каталоге данных. Данный файл используется для предотвращения запуска нескольких экземпляров сервера в одном и том же каталоге данных, а также может применяться для остановки сервера.
Существует несколько стандартных причин, по которым может произойти сбой при запуске сервера. Следует проверить файл журнала сервера или запустить его вручную (без перенаправления стандартного потока вывода или стандартного потока ошибок) и проанализировать выводимые сообщения об ошибках. Ниже приведено более подробное описание наиболее распространенных сообщений об ошибках.
LOG: не удалось привязать IPv4-адрес "127.0.0.1": Адрес уже используется HINT: Возможно, другой процесс postmaster уже запущен на порту 5432? Если нет, подождите несколько секунд и повторите попытку. FATAL: не удалось создать сокеты TCP/IP
Обычно это означает именно то, о чем говорится в сообщении: была предпринята попытка запустить другой сервер на том же порту, который уже занят. Однако если сообщение об ошибке от ядра отличается от Адрес
уже используется или другие подобные варианты; возможно, возникла иная проблема. Например, при попытке запустить сервер
на зарезервированном номере порта может быть выведено следующее:
$ postgres -p 666
LOG: could not bind IPv4 address "127.0.0.1": Permission denied
HINT: Is another postmaster already running on port 666? Если нет, подождите несколько секунд и повторите попытку.
FATAL: не удалось создать сокеты TCP/IP
Сообщение следующего вида:
FATAL: could not create shared memory segment: Invalid argument DETAIL: Failed system call was shmget(key=5440001, size=4011376640, 03600).
скорее всего, означает, что установленное в ядре ограничение на размер разделяемой памяти меньше рабочей области, Digital Q.DataBase
которую пытается создать сервер (4011376640 байт в данном примере).
Подобная ситуация вероятна только при использовании значения shared_memory_type
в sysv. В этом случае можно попытаться запустить сервер с меньшим числом буферов (shared_buffers), либо следует изменить конфигурацию ядра для увеличения допустимого размера разделяемой памяти. Данное сообщение может также возникать при попытке запуска нескольких серверов на одной машине, если общий объем запрошенной ими памяти превышает системные ограничения ядра.
Ошибка вида:
FATAL: could not create semaphores: No space left on device DETAIL: Failed system call was semget(5440126, 17, 03600).
не означает, может означать, что на диске закончилось свободное пространство. Это означает, что установленные в ядре системные ограничения на количество System V семафоров меньше того количества, которое Digital Q.DataBase система пытается создать. Как и в предыдущем случае, проблему можно решить путем запуска сервера с уменьшенным количеством разрешенных соединений (max_connections), однако в конечном итоге рекомендуется увеличить системные ограничения ядра.
Подробные сведения о настройке средств System V IPC приведены в Раздел 3.3.4.1.
Хотя возможные ошибки на стороне клиента весьма разнообразны и зависят от приложения, некоторые из них могут быть напрямую связаны с тем, как был запущен сервер. Условия, отличные от приведенных ниже, должны быть описаны в документации к соответствующему клиентскому приложению.
psql: error: connection to server at "server.joe.com" (123.123.123.123), port 5432 failed: Connection refused
Запущен ли сервер на этом хосте и принимает ли он соединения TCP/IP?
Это типовая ошибка «не удалось найти сервер для взаимодействия» сбой. Вышеуказанная ошибка возникает при попытке установить соединение по протоколу TCP/IP. Распространенной ошибкой является отсутствие настройки сервера для разрешения соединений TCP/IP.
Кроме того, данное сообщение может появиться при попытке установить соединение через Unix-сокет с локальным сервером:
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
Запущен ли сервер локально и принимает ли он соединения через этот сокет?
Если сервер действительно запущен, следует проверить, совпадает ли путь к сокету, используемый клиентом (в данном случае /tmp), с соответствующей настройкой
unix_socket_directories сервера.
Сообщение об ошибке подключения всегда содержит адрес сервера или путь к сокету; это позволяет подтвердить, что клиент пытается подключиться к корректному узлу. Если сервер фактически не принимает соединения по указанному адресу, сообщение об ошибке ядра обычно имеет вид
Connection refused или
No such file or directory, как
показано в примере. (Важно понимать, что ошибка
Connection refused в данном контексте
не означает, означает, что сервер получил запрос на соединение и отклонил его. В этой ситуации будет выведено другое сообщение, как показано в Раздел 3.5.15.) Другие сообщения об ошибках,
такие как Connection timed out могут
указывать на более глубокие проблемы, такие как отсутствие сетевого
соединения или блокировка подключения брандмауэром.