initdb
initdb — создать кластер баз данных Postgres Pro
Синтаксис
initdb [параметр...] [ --pgdata | -D ]каталог
Описание
Команда initdb создаёт новый кластер баз данных Postgres Pro. Кластер — это коллекция баз данных под управлением единого экземпляра сервера.
Создание кластера баз данных заключается в создании каталогов для хранения данных, формировании общих системных таблиц (относящихся ко всему кластеру, а не к какой-либо базе) и создании баз данных postgres, template1 и template0. База postgres используется пользователями, утилитами и сторонними приложениями по умолчанию. Базы template1 и template0 предназначены для использования в качестве исходных баз данных, копии которых будут создавать последующие команды CREATE DATABASE. Базу template0 не следует изменять никогда, но вы можете добавлять объекты в template1, и они по умолчанию будут копироваться в базы данных, создаваемые позже. За подробностями обратитесь к Разделу 21.3.
При попытке создать каталог для хранения данных initdb может столкнуться с нехваткой прав доступа, если этот каталог принадлежит суперпользователю root. В таком случае необходимо назначить пользователя базы данных владельцем этого каталога при помощи chown. Затем выполнить su для смены пользователя и дальнейшего выполнения initdb.
Команда initdb должна выполняться от имени пользователя, под которым будет запускаться сервер, так как ему необходим полный доступ к файлам и каталогам, создаваемым initdb. Сервер не может запускаться от имени суперпользователя, поэтому выполнение команды initdb от его лица будет отклонено.
Из соображений безопасности новый кластер, созданный программой initdb, будет доступен только для владельца кластера. Ключ --allow-group-access позволяет разрешить чтение файлов в кластере всем пользователям, входящим в группу владельца кластера. Это полезно для выполнения резервного копирования от имени непривилегированного пользователя.
Команда initdb инициализирует основную локаль кластера баз данных и кодировку набора символов. Эти параметры можно также установить отдельно для каждой базы при её создании. Команда initdb определяет эти параметры для шаблонных баз данных, и их значения будут использоваться по умолчанию для других баз. По умолчанию initdb получает параметры локали из переменных среды и определяет кодировку, исходя из параметров локали. Это должно устраивать практически всегда, если нет особых требований.
Выбрать другую локаль для кластера позволяет параметр --locale. Существуют также отдельные параметры --lc-* (см. ниже), позволяющие задать значения для отдельных категорий локали. Учтите, что с неподходящими значениями для разных категорий локали результаты могут быть бессмысленными, поэтому эти значения следует выбирать продуманно.
В качестве библиотеки, реализующей поддержку локалей, можно также использовать библиотеку ICU. Чтобы выбрать её, укажите --locale-provider=icu. (При этом также определяется только значение по умолчанию для создаваемых впоследствии баз данных.) Выбрать определённую локаль ICU позволяет параметр --icu-locale. Заметьте, что даже когда используется провайдер локалей ICU, initdb в любом случае выбирает и инициализирует локали libc в связи с особенностями реализации и для поддержки старого кода.
Если провайдер локалей не задан, он выбирается автоматически на основании значения lc_collate для кластера: для локалей C и POSIX выбирается libc, а для других локалей — icu.
Когда команда initdb выполняется, она показывает, какие параметры локали выбраны. Если вы задавали комбинацию параметров или у вас есть особые требования, рекомендуется проверить, соответствует ли результат ожиданиям.
Подробнее о параметрах локали можно узнать в Разделе 22.1.
Для изменения кодировки по умолчанию используется параметр --encoding. Узнать об этом больше можно в Разделе 22.3.
Параметры
-Aauthmethod--auth=authmethodПараметр определяет метод аутентификации по умолчанию для локальных пользователей, используемый в файле
pg_hba.conf(строкиhostиlocal). Допустимые значения описаны в Разделе 19.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. Наборы символов, поддерживаемые сервером Postgres Pro, описаны в Подразделе 22.3.1.-g--allow-group-accessПозволяет пользователям, входящим в группу владельца кластера, читать все файлы кластера, создаваемые программой
initdb. В Windows этот ключ не работает, так как там не поддерживаются разрешения для группы в стиле POSIX.--icu-locale=локальУказывает идентификатор локали ICU, если используется провайдер локалей ICU. По умолчанию используется значение lc_collate.
-k--data-checksumsПрименять контрольные суммы на страницах данных для выявления сбоев при вводе-выводе, которые иначе останутся незамеченными. Расчёт контрольных сумм может повлечь заметное снижение производительности. Когда контрольные суммы включены, они рассчитываются для всех объектов и во всех базах данных. Все ошибки контрольных сумм будут видны в представлении
pg_stat_database. За подробностями обратитесь к Разделу 28.2.По умолчанию кластеры Postgres Pro инициализируются с включёнными контрольными суммами. Чтобы изменить это поведение, добавьте параметр
--no-data-checksums.--no-data-checksumsОтключить контрольные суммы в страницах данных.
По умолчанию кластеры Postgres Pro инициализируются с включёнными контрольными суммами.
--locale=локальУстанавливает локаль кластера по умолчанию. Если флаг не указан, локаль устанавливается согласно окружению, в котором исполняется команда
initdb. Поддерживаемые локали описаны в Разделе 22.1.--lc-collate=локаль--lc-ctype=локаль--lc-messages=локаль--lc-monetary=локаль--lc-numeric=локаль--lc-time=локальАналогично
--localeустанавливает локаль, но только для заданной категории. Параметр--lc-collateпереопределяет параметр--localeнезависимо от того, указан ли провайдер правил сортировки.--locale=локаль@provider--lc-collate=локаль@providerЭто устаревшие варианты указания провайдера по сравнению с
--locale-provider, гдепровайдерможет принимать значениеicuилиlibc, алокальзадаётся в форматеlibc. После символа@может быть задан только один провайдер.--no-localeАналогично флагу
--locale=C.--locale-provider={libc|icu}Этот параметр выбирает провайдера локалей для баз данных, создаваемых в новом кластере. Его можно переопределить для создаваемых впоследствии баз в команде
CREATE DATABASE.-N--no-syncПо умолчанию
initdbждёт, пока все файлы не будут надёжно записаны на диск. С данным параметромinitdbзавершается быстрее, без ожидания, но в случае неожиданного сбоя операционной системы каталог данных может оказаться испорченным. Этот параметр может быть полезен при тестировании; в производственной среде применять его не следует.--no-instructionsПо умолчанию
initdbпосле всех сообщений выводит инструкции по запуску кластера. С этим ключом данные инструкции выводиться не будут. Этот ключ предназначен в первую очередь для применения на платформах, гдеinitdbиспользуется в специальных высокоуровневых процедурах, в рамках которых данные инструкции оказываются некорректными.--pwfile=имя_файлаПринуждает
initdbчитать пароль суперпользователя базы данных из файла, первая строка которого используется в качестве пароля.-S--sync-onlyБезопасно записывает все файлы базы на диск и останавливается. Другие операции initdb при этом не выполняются. В целом, этот параметр полезен для обеспечения надёжного восстановления после изменения значения fsync с
offнаon.--no-tuneПо умолчанию использование утилиты pgpro_tune в
initdbвключено. Чтобы её отключить, используйте этот параметр.--tune=optionsУстанавливает параметры для pgpro_tune. За дополнительной информацией обратитесь к их описанию.
-Tконфигурация--text-search-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удаляет все файлы, которые к тому моменту были созданы. Параметр предотвращает очистку файлов для целей отладки.
Другие параметры для тестирования 64-битных идентификаторов транзакций:
-mSTART_MX_ID--multixact-id=START_MX_IDЗадаёт для нового экземпляра БД начальный идентификатор мультитранзакций в десятичном виде для тестирования обновлений БД, значение по умолчанию —
0.-oSTART_MX_OFFSET--multixact-offset=START_MX_OFFSETЗадаёт для нового экземпляра БД начальное смещение мультитранзакций в десятичном виде для тестирования обновлений БД, значение по умолчанию —
0.-xSTART_XID--xid=START_XIDЗадаёт для нового экземпляра БД начальный идентификатор транзакций в десятичном виде для тестирования обновлений БД, значение по умолчанию —
0.
Прочие параметры:
-V--versionВыводит версию initdb и останавливается.
-?--helpПоказывает помощь по аргументам команды initdb и останавливается.
Переменные окружения
PGDATAУказывает каталог хранения данных кластера, можно изменить параметром
-D.PG_COLORВыбирает вариант использования цвета в диагностических сообщениях. Возможные значения:
always(всегда),auto(автоматически) иnever(никогда).PGPRO_TUNEУказывает, нужно ли использовать утилиту pgpro_tune без изменения параметров в командной строке. Если установлено значение
disable, действие этой переменной окружения аналогично установлению параметра--no-tune, то есть отключает pgpro_tune. Если задано другое значение и параметр--tuneили--no-tuneв командной строке явным образом не указан, поведение будет таким же, как если бы для параметра--tuneбыло задано значениеPGPRO_TUNE.TZУказывает часовой пояс кластера по умолчанию. Значение — это полное имя часового пояса (см. Подраздел 8.5.3).
Примечания
initdb можно выполнить командой pg_ctl initdb.