Перед началом эксплуатации необходимо инициализировать область хранения баз данных на диске. Это пространство называется кластер баз данных.
(В SQL стандарте используется термин «каталог»). Кластер баз данных представляет собой совокупность баз данных, управляемую одним экземпляром работающего сервера баз данных. После инициализации в кластере баз данных создается база данных с именем postgres, которая предназначена для использования по умолчанию утилитами, пользователями и сторонними приложениями. Для работы сервера баз данных наличие базы данных
postgres не является обязательным, однако многие внешние утилиты предполагают её существование. При инициализации в каждом кластере создаются еще две базы данных с именами template1
и template0. . Как следует из названий, они используются в качестве шаблонов для баз данных, создаваемых впоследствии; их не рекомендуется использовать для практических задач. (См. Глава 3.7 для
получения информации о создании новых баз данных внутри кластера.)
В терминах файловой системы кластер баз данных — это единая директория, в которой хранятся все данные. Она называется каталог
данных или директория данных. Выбор места для хранения данных остается полностью на ваше усмотрение. Значение по умолчанию отсутствует, хотя такие пути, как
/usr/local/pgsql/data или
/var/lib/pgsql/data являются популярными.
Перед использованием каталог данных необходимо инициализировать с помощью программы
initdb
которая устанавливается вместе с Digital Q.DataBase.
В случае использования пакетной версии Digital Q.DataBase, в нем могут быть предусмотрены определенные соглашения о размещении каталога данных, а также может предоставляться скрипт для его создания. В этом случае рекомендуется использовать данный скрипт вместо запуска initdb напрямую.
Для получения подробной информации обратитесь к документации на уровне пакета.
Чтобы инициализировать кластер баз данных вручную,
выполните команду initdb и укажите требуемое
расположение кластера баз данных в файловой системе с помощью параметра
-D , например:
$initdb -D /usr/local/pgsql/data
Обратите внимание, что данную команду необходимо выполнять от имени Digital Q.DataBase учетной записи пользователя, описанной в предыдущем разделе.
Кроме того, можно запустить initdb с помощью pg_ctl
программы следующим образом:
$pg_ctl -D /usr/local/pgsql/data initdb
Данный способ может быть более удобным, если вы используете pg_ctl для запуска и остановки
сервера (см. Раздел 3.3.3), так что pg_ctl станет единственной командой, используемой для управления экземпляром сервера баз данных.
initdb попытается создать указанную директорию, если она еще не существует. Разумеется, операция завершится ошибкой, если
initdb не имеет прав на запись в родительской директории. Как правило, рекомендуется, чтобы
Digital Q.DataBase пользователь владеет не только каталогом данных, но и его родительским каталогом, поэтому это не должно составлять проблемы. Если целевой родительский каталог также не существует,
его необходимо сначала создать, используя права root, если вышестоящий
каталог недоступен для записи. Данный процесс может выглядеть
следующим образом:
root#mkdir /usr/local/pgsqlroot#chown postgres /usr/local/pgsqlroot#su postgrespostgres$initdb -D /usr/local/pgsql/data
initdb откажется от выполнения, если каталог данных существует и уже содержит файлы; это предусмотрено для предотвращения случайной
перезаписи существующей установки.
Поскольку каталог данных содержит все данные, хранящиеся в базе данных, крайне важно обеспечить его защиту от несанкционированного доступа. initdb поэтому права доступа
отзываются у всех, кроме
пользователя Digital Q.DataBase и, опционально, группы.
Групповой доступ, если он включен, предоставляется только для чтения. Это позволяет непривилегированному пользователю из той же группы, что и владелец кластера, создавать резервную копию данных кластера или выполнять другие операции, требующие только доступа для чтения.
Обратите внимание: включение или отключение группового доступа в существующем кластере требует остановки работы кластера и установки соответствующих прав доступа для всех каталогов и файлов перед повторным запуском.
Digital Q.DataBase. В противном случае в каталоге данных может возникнуть смешение режимов доступа. Для кластеров, разрешающих доступ только владельцу, соответствующими правами являются 0700 для каталогов
и 0600 для файлов. Для кластеров, разрешающих также чтение группе, соответствующими правами являются 0750
для каталогов и 0640 для файлов.
Однако, хотя содержимое каталога защищено, настройки аутентификации клиентов по умолчанию позволяют любому локальному пользователю подключаться к базе данных и даже получать права суперпользователя базы данных. Если вы не доверяете другим локальным пользователям, рекомендуется использовать один из параметров
initdb's -W, --pwprompt
или --pwfile для назначения пароля суперпользователю базы данных.
Также следует указать -A scram-sha-256
чтобы метод trust аутентификации
не использовался по умолчанию; либо измените созданный pg_hba.conf
файл после выполнения команды initdb, но
до первого запуска сервера. (Другие
приемлемые подходы включают использование peer аутентификации
или прав доступа файловой системы для ограничения подключений. См. Глава 3.5 для получения дополнительной информации.)
initdb также инициализирует локаль по умолчанию для кластера баз данных.
Как правило, параметры локали берутся из переменных окружения
и применяются к инициализируемой базе данных. Существует возможность указать другую локаль для базы данных; более подробную информацию об этом можно найти в Раздел 3.8.1. Порядок сортировки по умолчанию, используемый в рамках конкретного кластера баз данных, устанавливается с помощью
initdb, и хотя допускается создание новых баз данных с другим порядком сортировки, порядок, используемый в шаблонных базах данных, создаваемых командой initdb, не может быть изменён без их удаления и повторного создания. Также использование локалей, отличных от C или POSIX. Поэтому важно правильно сделать этот выбор при первоначальной настройке.
initdb также устанавливает кодировку символов по умолчанию для кластера баз данных. Как правило, ее следует выбирать в соответствии с настройками локали. Подробнее см. Раздел 3.8.3.
Не-C и не-POSIX локали используют системные библиотеки сопоставления операционной системы для упорядочивания символов. Это определяет порядок ключей, хранящихся в индексах. По этой причине кластер баз данных не может быть переведен на несовместимую версию библиотеки сопоставления — ни путем восстановления из снимка, ни через бинарную потоковую репликацию, ни при использовании другой операционной системы или ее обновлении.
Во многих случаях кластеры баз данных создаются на файловых системах (томах), отличных от основного «корневого» тома. При выборе такого варианта не рекомендуется использовать корневой каталог (точку монтирования) дополнительного тома в качестве каталога данных. Оптимальным решением является создание подкаталога внутри точки монтирования, владельцем которого будет Digital Q.DataBase пользователь, а затем создать в ней каталог данных. Это позволяет избежать проблем с правами доступа, особенно при выполнении таких операций, как pg_upgrade, а также гарантирует корректную обработку ошибок в случае отключения вторичного тома.
Как правило, для Digital Q.DataBase можно использовать любую файловую систему с семантикой POSIX. Пользователи выбирают различные файловые системы по ряду причин, включая поддержку поставщиков, производительность и удобство эксплуатации. Опыт показывает, что при прочих равных условиях не следует ожидать значительных изменений производительности или поведения системы только лишь из-за смены файловой системы или внесения незначительных изменений в её конфигурацию.
Допускается использование NFS файловая система для хранения Digital Q.DataBase каталога данных. Digital Q.DataBase не выполняет никаких специальных действий для NFS файловых систем; это означает, что предполагается, что система NFS работает точно так же, как локально подключенные диски. Digital Q.DataBase не использует функциональные возможности, для которых характерно нестандартное поведение в NFS, такие как блокировка файлов.
Единственным обязательным требованием для использования NFS с
Digital Q.DataBase является монтирование файловой системы
с использованием опции hard опции. При использовании
hard данной опции процессы могут «зависать»
неопределенно долго при возникновении сетевых проблем, поэтому такая конфигурация потребует тщательной настройки мониторинга. Опция soft параметр
будет прерывать системные вызовы при возникновении проблем с сетью, однако
Digital Q.DataBase прерванные таким образом системные вызовы не будут повторяться, поэтому любое подобное прерывание приведет к регистрации ошибки ввода-вывода.
Нет необходимости использовать sync параметр монтирования. Поведение async параметра достаточно, так как система
Digital Q.DataBase выполняет fsync
вызовы в подходящие моменты времени для сброса кэшей записи. (Это аналогично механизму работы в локальной файловой системе.) Тем не менее, настоятельно рекомендуется использовать параметр sync экспорта на NFS-
сервере в системах, где он поддерживается (преимущественно Linux).
В противном случае выполнение fsync или аналогичной операции на стороне NFS-клиента фактически не гарантирует запись данных в постоянное хранилище на сервере, что может привести к повреждению данных, аналогичному работе с параметром fsync off. Значения по умолчанию для данных параметров монтирования и экспорта различаются в зависимости от поставщиков и версий, поэтому рекомендуется проверить и, возможно, задать их явно во избежание неоднозначности.
В некоторых случаях доступ к внешним устройствам хранения может осуществляться либо через NFS, либо через протоколы более низкого уровня, такие как iSCSI. В последнем случае хранилище представляется как блочное устройство, на котором может быть создана любая доступная файловая система. Такой подход может избавить администратора баз данных от необходимости учитывать специфические особенности NFS, однако сложность управления удаленным хранилищем в этом случае переносится на другие уровни.