initdb
initdb — создать кластер баз данных PostgreSQL
Синтаксис
initdb
[параметр
...] [ --pgdata
| -D
]каталог
Описание
Команда initdb
создаёт новый кластер баз данных PostgreSQL. Кластер — это коллекция баз данных под управлением единого экземпляра сервера.
Инициализация кластера базы данных заключается в создании каталогов для хранения данных, формировании общих системных таблиц (относящихся ко всему кластеру, а не к какой-либо базе) и создании баз данных template1
и postgres
. Впоследствии все новые базы создаются на основе шаблона template1
(все дополнения, установленные в template1
автоматически копируются в каждую новую базу данных). База postgres
используется пользователями, утилитами и сторонними приложениями по умолчанию.
При попытке создать каталог для хранения данных initdb
может столкнуться с нехваткой прав доступа, если этот каталог принадлежит суперпользователю root. В таком случае необходимо назначить пользователя базы данных владельцем этого каталога при помощи chown
. Затем выполнить su
для смены пользователя и дальнейшего выполнения initdb
.
Команда initdb
должна выполняться от имени пользователя, под которым будет запускаться сервер, так как ему необходим полный доступ к файлам и каталогам, создаваемым initdb
. Сервер не может запускаться от имени суперпользователя, поэтому выполнение команды initdb
от его лица будет отклонено.
Из соображений безопасности новый кластер, созданный программой initdb
, будет доступен только для владельца кластера. Ключ --allow-group-access
позволяет разрешить чтение файлов в кластере всем пользователям, входящим в группу владельца кластера. Это полезно для выполнения резервного копирования от имени непривилегированного пользователя.
initdb
инициализирует локали и кодировки баз данных кластера, которые будут использоваться по умолчанию. Кодировка, порядок сортировки (LC_COLLATE
), классы наборов символов (LC_CTYPE
, например, заглавные, строчные буквы, цифры) могут устанавливаться раздельно при создании новой базы данных. initdb
определяет параметры локали для шаблона template1
, которые будут применяться по умолчанию для новых баз.
Чтобы изменить порядок сортировки по умолчанию или классы наборов символов, используются параметры --lc-collate
и --lc-ctype
. Порядок сортировки, отличающийся от C
или POSIX
, оказывает влияние на производительность. Поэтому необходимо тщательно выбирать необходимую и достаточную локаль при выполнении initdb
.
Другие категории локали можно изменить и после старта сервера. Также можно использовать параметр --locale
, чтобы задать локаль для всех категорий одновременно, включая порядок сортировки и классы наборов символов. Значения локалей сервера (lc_*
) можно вывести командой SHOW ALL
. Узнать об этом больше можно в Разделе 23.1.
Для изменения кодировки по умолчанию используется параметр --encoding
. Узнать об этом больше можно в Разделе 23.3.
Параметры
-A
authmethod
--auth=
authmethod
Параметр определяет метод аутентификации по умолчанию для локальных пользователей, используемый в файле
pg_hba.conf
(строкиhost
иlocal
). Программа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=
кодировка
Устанавливает кодировку шаблона и новых баз данных по умолчанию, если не указать иное при их создании. По умолчанию устанавливается исходя из указанной локали, и далее, если не удалось определить, выбирается
SQL_ASCII
. Кодировки, поддерживаемые сервером PostgreSQL, описаны в Подразделе 23.3.1.-g
--allow-group-access
Позволяет пользователям, входящим в группу владельца кластера, читать все файлы кластера, создаваемые программой
initdb
. В Windows этот ключ не работает, так как там не поддерживаются разрешения для группы в стиле POSIX.-k
--data-checksums
Применять контрольные суммы на страницах данных для выявления сбоев при вводе/выводе, которые иначе останутся незамеченными. Расчёт контрольных сумм может повлечь заметное снижение производительности. Этот режим можно включить только при инициализации и нельзя изменить позже. Когда контрольные суммы включены, они рассчитываются для всех объектов и во всех базах данных.
--locale=
локаль
Устанавливает локаль кластера по умолчанию. Если флаг не указан, локаль устанавливается согласно окружению, в котором исполняется команда
initdb
. Поддерживаемые локали описаны в Разделе 23.1.--lc-collate=
локаль
--lc-ctype=
локаль
--lc-messages=
локаль
--lc-monetary=
локаль
--lc-numeric=
локаль
--lc-time=
локаль
Аналогично
--locale
устанавливает необходимую локаль, но в заданной категории.--no-locale
Аналогично флагу
--locale=C
.-N
--no-sync
По умолчанию
initdb
ждёт, пока все файлы не будут надёжно записаны на диск. С данным параметромinitdb
завершается быстрее, без ожидания, но в случае неожиданного сбоя операционной системы каталог данных может оказаться испорченным. Этот параметр может быть полезен при тестировании; в производственной среде применять его не следует.--pwfile=
имя_файла
Принуждает
initdb
читать пароль суперпользователя базы данных из файла, первая строка которого используется в качестве пароля.-S
--sync-only
Безопасно записывает все файлы базы на диск и останавливается. Другие операции initdb при этом не выполняются.
-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
, используемое для создания каталога таблиц. С этим параметром выдаётся очень много крайне скучных сообщений.-L
каталог
Указывает
initdb
, где необходимо искать входные файлы для развёртывания кластера. Обычно это не требуется. Приложение само запросит эти данные, если будет необходимо.-n
--no-clean
По умолчанию, при выявлении ошибки на этапе развёртывания кластера,
initdb
удаляет все файлы, которые к тому моменту были созданы. Параметр предотвращает очистку файлов для целей отладки.
Прочие параметры:
-V
--version
Выводит версию initdb и останавливается.
-?
--help
Показывает помощь по аргументам команды initdb и останавливается.
Переменные окружения
PGDATA
Указывает каталог хранения данных кластера, можно изменить параметром
-D
.TZ
Указывает часовой пояс кластера по умолчанию. Значение — это полное имя часового пояса (см. Подраздел 8.5.3).
Эта утилита, как и большинство других утилит PostgreSQL, также использует переменные среды, поддерживаемые libpq (см. Раздел 34.14).
Замечания
initdb
можно выполнить командой pg_ctl initdb
.