initdb
initdb — создать кластер баз данных PostgreSQL
Синтаксис
initdb
[параметр
...] [ --pgdata
| -D
]каталог
Описание
Команда initdb
создаёт новый кластер баз данных PostgreSQL. Кластер — это коллекция баз данных под управлением единого экземпляра сервера.
Создание кластера баз данных заключается в создании каталогов для хранения данных, формировании общих системных таблиц (относящихся ко всему кластеру, а не к какой-либо базе) и создании баз данных postgres
, template1
и template0
. База postgres
используется пользователями, утилитами и сторонними приложениями по умолчанию. Базы template1
и template0
предназначены для использования в качестве исходных баз данных, копии которых будут создавать последующие команды CREATE DATABASE
. Базу template0
не следует изменять никогда, но вы можете добавлять объекты в template1
, и они по умолчанию будут копироваться в базы данных, создаваемые позже. За подробностями обратитесь к Разделу 23.3.
При попытке создать каталог для хранения данных initdb
может столкнуться с нехваткой прав доступа, если этот каталог принадлежит суперпользователю root. В таком случае необходимо назначить пользователя базы данных владельцем этого каталога при помощи chown
. Затем выполнить su
для смены пользователя и дальнейшего выполнения initdb
.
Команда initdb
должна выполняться от имени пользователя, под которым будет запускаться сервер, так как ему необходим полный доступ к файлам и каталогам, создаваемым initdb
. Сервер не может запускаться от имени суперпользователя, поэтому выполнение команды initdb
от его лица будет отклонено.
Из соображений безопасности новый кластер, созданный программой initdb
, будет доступен только для владельца кластера. Ключ --allow-group-access
позволяет разрешить чтение файлов в кластере всем пользователям, входящим в группу владельца кластера. Это полезно для выполнения резервного копирования от имени непривилегированного пользователя.
Команда initdb
инициализирует основную локаль кластера баз данных и кодировку набора символов. Эти параметры можно также установить отдельно для каждой базы при её создании. Команда initdb
определяет эти параметры для шаблонных баз данных, и их значения будут использоваться по умолчанию для других баз. По умолчанию initdb
выбирает провайдера локалей libc
, получает параметры локали из переменных среды и определяет кодировку, исходя из параметров локали. Это должно устраивать практически всегда, если нет особых требований.
Выбрать другую локаль для кластера позволяет параметр --locale
. Существуют также отдельные параметры --lc-*
(см. ниже), позволяющие задать значения для отдельных категорий локали. Учтите, что с неподходящими значениями для разных категорий локали результаты могут быть бессмысленными, поэтому эти значения следует выбирать продуманно.
В качестве библиотеки, реализующей поддержку локалей, можно также использовать библиотеку ICU. Чтобы выбрать её, укажите --locale-provider=icu
. (При этом также определяется только значение по умолчанию для создаваемых впоследствии баз данных.) Выбрать определённую локаль ICU позволяет параметр --icu-locale
. Заметьте, что даже когда используется провайдер локалей ICU, initdb
в любом случае выбирает и инициализирует локали libc в связи с особенностями реализации и для поддержки старого кода.
Когда команда initdb
выполняется, она показывает, какие параметры локали выбраны. Если вы задавали комбинацию параметров или у вас есть особые требования, рекомендуется проверить, соответствует ли результат ожиданиям.
Подробнее о параметрах локали можно узнать в Разделе 24.1.
Для изменения кодировки по умолчанию используется параметр --encoding
. Узнать об этом больше можно в Разделе 24.3.
Параметры
-A
authmethod
--auth=
authmethod
Параметр определяет метод аутентификации по умолчанию для локальных пользователей, используемый в файле
pg_hba.conf
(строкиhost
иlocal
). Допустимые значения описаны в Разделе 21.1.Программа
initdb
предварительно внесёт указанный метод аутентификации вpg_hba.conf
в записи как обычных соединений, так и соединений репликации.Не используйте
trust
, если не можете доверять всем локальным пользователям в вашей системе. Режимtrust
используется по умолчанию для облегчения процесса установки.--auth-host=
authmethod
Параметр указывает метод аутентификации для локальных пользователей, подключающихся по TCP/IP, используемый в
pg_hba.conf
(строкиhost
).--auth-local=
authmethod
Параметр выбирает метод аутентификации локальных пользователей, подключающихся через Unix-сокет, используемый в
pg_hba.conf
(строкиlocal
).-D
каталог
--pgdata=
каталог
Параметр указывает каталог хранения данных кластера. Это единственный обязательный параметр для команды
initdb
. При этом его можно указать в переменной окруженияPGDATA
, что будет удобным при дальнейшем использовании (postgres
обращается к этой же переменной).-E
кодировка
--encoding=
кодировка
Устанавливает кодировку по умолчанию для баз-шаблонов. Эта кодировка будет по умолчанию выбираться и для баз данных, создаваемых позже, если вы не переопределите её. В отсутствие этого указания кодировка выбирается, исходя из указанной локали, если используется провайдер локалей libc, а если используется провайдер локалей ICU, выбирается
UTF8
. Наборы символов, поддерживаемые сервером PostgreSQL, описаны в Подразделе 24.3.1.-g
--allow-group-access
Позволяет пользователям, входящим в группу владельца кластера, читать все файлы кластера, создаваемые программой
initdb
. В Windows этот ключ не работает, так как там не поддерживаются разрешения для группы в стиле POSIX.--icu-locale=
локаль
Указывает идентификатор локали ICU, если используется провайдер локалей ICU.
-k
--data-checksums
Применять контрольные суммы на страницах данных для выявления сбоев при вводе/выводе, которые иначе останутся незамеченными. Расчёт контрольных сумм может повлечь заметное снижение производительности. Когда контрольные суммы включены, они рассчитываются для всех объектов и во всех базах данных. Все ошибки контрольных сумм будут видны в представлении
pg_stat_database
. За подробностями обратитесь к Разделу 30.2.--locale=
локаль
Устанавливает локаль кластера по умолчанию. Если флаг не указан, локаль устанавливается согласно окружению, в котором исполняется команда
initdb
. Поддерживаемые локали описаны в Разделе 24.1.--lc-collate=
локаль
--lc-ctype=
локаль
--lc-messages=
локаль
--lc-monetary=
локаль
--lc-numeric=
локаль
--lc-time=
локаль
Аналогично
--locale
устанавливает необходимую локаль, но в заданной категории.--no-locale
Аналогично флагу
--locale=C
.--locale-provider={
libc
|icu
}Этот параметр выбирает провайдера локалей для баз данных, создаваемых в новом кластере. Его можно переопределить для создаваемых впоследствии баз в команде
CREATE DATABASE
. По умолчанию используетсяlibc
.-N
--no-sync
По умолчанию
initdb
ждёт, пока все файлы не будут надёжно записаны на диск. С данным параметромinitdb
завершается быстрее, без ожидания, но в случае неожиданного сбоя операционной системы каталог данных может оказаться испорченным. Этот параметр может быть полезен при тестировании; в производственной среде применять его не следует.--no-instructions
По умолчанию
initdb
после всех сообщений выводит инструкции по запуску кластера. С этим ключом данные инструкции выводиться не будут. Этот ключ предназначен в первую очередь для применения на платформах, гдеinitdb
используется в специальных высокоуровневых процедурах, в рамках которых данные инструкции оказываются некорректными.--pwfile=
имя_файла
Принуждает
initdb
читать пароль суперпользователя базы данных из файла, первая строка которого используется в качестве пароля.-S
--sync-only
Безопасно записывает все файлы базы на диск и останавливается. Другие операции initdb при этом не выполняются. В целом, этот параметр полезен для обеспечения надёжного восстановления после изменения значения fsync с
off
наon
.-T
config
--text-search-config=
config
Устанавливает конфигурацию текстового поиска по умолчанию. За дополнительными сведениями обратитесь к default_text_search_config.
-U
имя_пользователя
--username=
имя_пользователя
Устанавливает имя суперпользователя базы данных. По умолчанию используется имя пользователя ОС, запустившего
initdb
. По факту, само по себе имя суперпользователя базы данных не важно, но этот параметр позволяет оставить привычное postgres, если имя пользователя ОС другое.-W
--pwprompt
Указывает
initdb
запросить пароль, который будет назначен суперпользователю базы данных. Это не важно, если не планируется использовать аутентификацию по паролю. В ином случае этот режим аутентификации оказывается неприменимым, пока пароль не задан.-X
каталог
--waldir=
каталог
Этот параметр указывает каталог для хранения журнала предзаписи.
--wal-segsize=
размер
Задаёт размер сегмента WAL, в мегабайтах. Такой размер будет иметь каждый отдельный файл в журнале WAL. По умолчанию размер равен 16 мегабайтам. Значение должно задаваться степенью 2 от 1 до 1024 (в мегабайтах). Этот параметр можно установить только во время инициализации и нельзя изменить позже.
Этот размер бывает полезно поменять при тонкой настройке трансляции или архивации WAL. Кроме того, в базах данных с WAL большого объёма огромное количество файлов WAL в каталоге может стать проблемой с точки зрения производительности и администрирования. Увеличение размера файлов WAL приводит к уменьшению числа этих файлов.
Другие реже используемые параметры описаны здесь:
-d
--debug
Выводит отладочные сообщения загрузчика и ряд других сообщений, не очень интересных широкой публике. Загрузчик — это приложение
initdb
, используемое для создания каталога таблиц. С этим параметром выдаётся очень много крайне скучных сообщений.--discard-caches
Запустить загрузчик с параметром
debug_discard_caches=1
. Это очень сильно замедлит выполнение и полезно только для низкоуровневой отладки.-L
каталог
Указывает
initdb
, где необходимо искать входные файлы для развёртывания кластера. Обычно это не требуется. Приложение само запросит эти данные, если будет необходимо.-n
--no-clean
По умолчанию, при выявлении ошибки на этапе развёртывания кластера,
initdb
удаляет все файлы, которые к тому моменту были созданы. Параметр предотвращает очистку файлов для целей отладки.
Прочие параметры:
-V
--version
Выводит версию initdb и останавливается.
-?
--help
Показывает помощь по аргументам команды initdb и останавливается.
Переменные окружения
PGDATA
Указывает каталог хранения данных кластера, можно изменить параметром
-D
.PG_COLOR
Выбирает вариант использования цвета в диагностических сообщениях. Возможные значения:
always
(всегда),auto
(автоматически) иnever
(никогда).TZ
Указывает часовой пояс кластера по умолчанию. Значение — это полное имя часового пояса (см. Подраздел 8.5.3).
Примечания
initdb
можно выполнить командой pg_ctl initdb
.