initdb
initdb — создать кластер баз данных PostgreSQL
Синтаксис
initdb
[параметр
...] [ --pgdata
| -D
]каталог
Описание
Команда initdb
создаёт новый кластер баз данных PostgreSQL.
Создание кластера баз данных заключается в создании каталогов для хранения данных кластера, формировании общих системных таблиц (относящихся ко всему кластеру, а не к какой-либо базе) и создании баз данных postgres
, template1
и template0
. База postgres
используется пользователями, утилитами и сторонними приложениями по умолчанию. Базы template1
и template0
предназначены для использования в качестве исходных баз данных, копии которых будут создавать последующие команды CREATE DATABASE
. Базу template0
не следует изменять никогда, но вы можете добавлять объекты в template1
, и они по умолчанию будут копироваться в базы данных, создаваемые позже. За подробностями обратитесь к Разделу 22.3.
При попытке создать каталог для хранения данных initdb
может столкнуться с нехваткой прав доступа, если этот каталог принадлежит суперпользователю root. В таком случае необходимо назначить пользователя базы данных владельцем этого каталога при помощи chown
. Затем выполнить su
для смены пользователя и дальнейшего выполнения initdb
.
Команда initdb
должна выполняться от имени пользователя, под которым будет запускаться сервер, так как ему необходим полный доступ к файлам и каталогам, создаваемым initdb
. Сервер не может запускаться от имени суперпользователя, поэтому выполнение команды initdb
от его лица будет отклонено.
Из соображений безопасности новый кластер, созданный программой initdb
, будет доступен только для владельца кластера. Ключ --allow-group-access
позволяет разрешить чтение файлов в кластере всем пользователям, входящим в группу владельца кластера. Это полезно для выполнения резервного копирования от имени непривилегированного пользователя.
initdb
инициализирует локали и кодировки баз данных кластера, которые будут использоваться по умолчанию. Они могут устанавливаться раздельно при создании новой базы данных. initdb
определяет параметры локали для шаблонных баз данных, применяющиеся по умолчанию для новых баз.
По умолчанию initdb
использует провайдер локали libc
(см. Подраздел 23.1.4). Провайдер локали libc
получает параметры локали из текущего окружения и определяет кодировку, исходя из параметров локали.
Выбрать другую локаль для кластера позволяет параметр --locale
. Существуют также отдельные параметры --lc-*
и --icu-locale
(см. ниже), позволяющие задать значения для отдельных категорий локали. Учтите, что с неподходящими значениями для разных категорий локали результаты могут быть бессмысленными, поэтому эти значения следует выбирать продуманно.
В качестве библиотеки, реализующей поддержку локалей, initdb
может также использовать библиотеку ICU, если указать --locale-provider=icu
. При этом сервер должен быть собран с поддержкой ICU. Выбрать определённую локаль ICU позволяет параметр --icu-locale
. Заметьте, что даже когда используется провайдер локалей ICU, initdb
в любом случае выбирает и инициализирует локали libc в связи с особенностями реализации и для поддержки старого кода.
Когда команда initdb
выполняется, она показывает, какие параметры локали выбраны. Если вы задавали комбинацию параметров или у вас есть особые требования, рекомендуется проверить, соответствует ли результат ожиданиям.
Подробнее о параметрах локали можно узнать в Разделе 23.1.
Для изменения кодировки по умолчанию используется параметр --encoding
. Узнать об этом больше можно в Разделе 23.3.
Параметры
-A
authmethod
--auth=
#authmethod
Параметр определяет метод аутентификации по умолчанию для локальных пользователей, используемый в файле
pg_hba.conf
(строкиhost
иlocal
). Допустимые значения описаны в Разделе 20.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=
#кодировка
Устанавливает кодировку по умолчанию для баз-шаблонов. Эта кодировка будет по умолчанию выбираться и для баз данных, создаваемых позже, если вы не переопределите её. Наборы символов, поддерживаемые сервером PostgreSQL, описаны в Подразделе 23.3.1.
По умолчанию кодировка для баз-шаблонов выбирается, исходя из указанной локали. Если задан параметр
--no-locale
(или, что равнозначно, задана локальC
илиPOSIX
), по умолчанию используетсяUTF8
для провайдера ICU иSQL_ASCII
для провайдераlibc
.-g
--allow-group-access
#Позволяет пользователям, входящим в группу владельца кластера, читать все файлы кластера, создаваемые программой
initdb
. В Windows этот ключ не работает, так как там не поддерживаются разрешения для группы в стиле POSIX.--icu-locale=
#локаль
Указывает идентификатор локали ICU, если используется провайдер локалей ICU. Поддержка локали описана в Разделе 23.1.
--icu-rules=
#правила
Указывает дополнительные правила для настройки поведения сортировки по умолчанию. Параметр поддерживается только для ICU.
-k
--data-checksums
#Применять контрольные суммы на страницах данных для выявления сбоев при вводе/выводе, которые иначе останутся незамеченными. Расчёт контрольных сумм может повлечь заметное снижение производительности. Когда контрольные суммы включены, они рассчитываются для всех объектов и во всех базах данных. Все ошибки контрольных сумм будут видны в представлении
pg_stat_database
. За подробностями обратитесь к Разделу 28.2.--locale=
#локаль
Устанавливает локаль кластера по умолчанию. Если флаг не указан, локаль устанавливается согласно окружению, в котором исполняется команда
initdb
. Поддерживаемые локали описаны в Разделе 23.1.Если для параметра
--locale-provider
установлено значениеbuiltin
, то также должен быть задан--locale
или--builtin-locale
со значениемC
илиC.UTF-8
.--lc-collate=
локаль
--lc-ctype=
локаль
--lc-messages=
локаль
--lc-monetary=
локаль
--lc-numeric=
локаль
--lc-time=
#локаль
Аналогично
--locale
устанавливает необходимую локаль, но в заданной категории.--no-locale
#Аналогично флагу
--locale=C
.--builtin-locale=
#локаль
Указывает имя локали при использовании провайдера
builtin
. Поддержка локалей описана в Разделе 23.1.--locale-provider={
#builtin
|libc
|icu
}Этот параметр выбирает провайдера локалей для баз данных, создаваемых в новом кластере. Его можно переопределить для создаваемых впоследствии баз в команде
CREATE DATABASE
. По умолчанию используетсяlibc
(см. Подраздел 23.1.4).--pwfile=
#имя_файла
Принуждает
initdb
читать пароль начального суперпользователя из файла, первая строка которого используется в качестве пароля.-T
конфигурация
--text-search-config=
#конфигурация
Устанавливает конфигурацию текстового поиска по умолчанию. За дополнительными сведениями обратитесь к default_text_search_config.
-U
имя_пользователя
--username=
#имя_пользователя
Задаёт имя пользователя для начального суперпользователя. По умолчанию это имя пользователя ОС, запускающего
initdb
.-W
--pwprompt
#Указывает
initdb
запросить пароль, который будет назначен начальному суперпользователю. Это не важно, если не планируется использовать аутентификацию по паролю. В ином случае этот режим аутентификации оказывается неприменимым, пока пароль не задан.-X
каталог
--waldir=
#каталог
Этот параметр указывает каталог для хранения журнала предзаписи.
--wal-segsize=
#размер
Задаёт размер сегмента WAL, в мегабайтах. Такой размер будет иметь каждый отдельный файл в журнале WAL. По умолчанию размер равен 16 мегабайтам. Значение должно задаваться степенью 2 от 1 до 1024 (в мегабайтах). Этот параметр можно установить только во время инициализации и нельзя изменить позже.
Этот размер бывает полезно поменять при тонкой настройке трансляции или архивации WAL. Кроме того, в базах данных с WAL большого объёма огромное количество файлов WAL в каталоге может стать проблемой с точки зрения производительности и администрирования. Увеличение размера файлов WAL приводит к уменьшению числа этих файлов.
Другие реже используемые параметры описаны здесь:
-c
имя
=значение
--set
#имя
=значение
Принудительно устанавливает заданное
значение
для серверного параметра с указаннымименем
во времяinitdb
, а также переопределяет этот параметр в файлеpostgresql.conf
, чтобы использовать его при последующих запусках сервера. Этот параметрinitdb
можно задавать несколько раз, чтобы переопределить несколько серверных параметров. В основном он используется в случаях, когда сервер не может запуститься со значениями параметров по умолчанию.-d
--debug
#Выводит отладочные сообщения загрузчика и ряд других сообщений, не очень интересных широкой публике. Загрузчик — это приложение
initdb
, используемое для создания каталога таблиц. С этим параметром выдаётся очень много крайне скучных сообщений.--discard-caches
#Запустить загрузчик с параметром
debug_discard_caches=1
. Это очень сильно замедлит выполнение и полезно только для низкоуровневой отладки.-L
#каталог
Указывает
initdb
, где необходимо искать входные файлы для развёртывания кластера. Обычно это не требуется. Приложение само запросит эти данные, если будет необходимо.-n
--no-clean
#По умолчанию, при выявлении ошибки на этапе развёртывания кластера,
initdb
удаляет все файлы, которые к тому моменту были созданы. Параметр предотвращает очистку файлов для целей отладки.-N
--no-sync
#По умолчанию
initdb
ждёт, пока все файлы не будут надёжно записаны на диск. С данным параметромinitdb
завершается быстрее, без ожидания, но в случае неожиданного сбоя операционной системы каталог данных может оказаться испорченным. Этот параметр может быть полезен при тестировании; в производственной среде применять его не следует.--no-instructions
#По умолчанию
initdb
после всех сообщений выводит инструкции по запуску кластера. С этим ключом данные инструкции выводиться не будут. Этот ключ предназначен в первую очередь для применения на платформах, гдеinitdb
используется в специальных высокоуровневых процедурах, в рамках которых данные инструкции оказываются некорректными.-s
--show
#Вывести внутренние параметры и завершить команду. Может использоваться для отладки во время установки initdb.
--sync-method=
#метод
Со значением
fsync
(это значение по умолчанию),initdb
будет рекурсивно открывать и синхронизировать все файлы в каталоге данных. Поиск файлов будет осуществляться по символическим ссылкам для каталога WAL и каждого настроенного табличного пространства.В Linux возможен вариант
syncfs
, когда от ОС требуется синхронизировать целиком каждую из файловых систем, содержащих каталог данных, файлы WAL и табличные пространства. Более подробно особенности использованияsyncfs
описаны в recovery_init_sync_method.В режиме
--no-sync
этот параметр не оказывает никакого влияния.-S
--sync-only
#Безопасно записывает все файлы базы на диск и останавливается. Другие операции initdb при этом не выполняются. В целом, этот параметр полезен для обеспечения надёжного восстановления после изменения значения fsync с
off
наon
.
Прочие параметры:
Переменные окружения
PGDATA
#Указывает каталог хранения данных кластера, можно изменить параметром
-D
.PG_COLOR
#Выбирает вариант использования цвета в диагностических сообщениях. Возможные значения:
always
(всегда),auto
(автоматически) иnever
(никогда).TZ
#Указывает часовой пояс кластера по умолчанию. Значение — это полное имя часового пояса (см. Подраздел 8.5.3).
Примечания
initdb
можно выполнить командой pg_ctl initdb
.