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.

Прочие параметры:

-V
--version #

Выводит версию initdb и останавливается.

-?
--help #

Показывает помощь по аргументам команды initdb и останавливается.

Переменные окружения

PGDATA #

Указывает каталог хранения данных кластера, можно изменить параметром -D.

PG_COLOR #

Выбирает вариант использования цвета в диагностических сообщениях. Возможные значения: always (всегда), auto (автоматически) и never (никогда).

TZ #

Указывает часовой пояс кластера по умолчанию. Значение — это полное имя часового пояса (см. Подраздел 8.5.3).

Примечания

initdb можно выполнить командой pg_ctl initdb.