Перейти к основному содержимому

initdb

примечание

Эта страница переведена при помощи нейросети GigaChat.

initdb — создает новый кластер баз данных PostgreSQL.

Синтаксис

initdb [option ...] [--pgdata | -D] directory

Описание

initdb создает новый кластер баз данных PostgreSQL. Кластер баз данных — это набор баз данных, которые управляются одним сервером.

Процесс создания кластера включает:

  • создание каталогов для хранения данных;
  • генерацию общих служебных таблиц, которые используются на уровне всего кластера;
  • создание трех баз данных: postgres, template1 и template0.

База данных postgres является базой данных по умолчанию — для пользователей, утилит и внешних приложений.

template1 и template0 служат шаблонами для создания новых баз данных через CREATE DATABASE:

  • template0 следует оставить неизменной;
  • template1 можно модифицировать (например, добавить расширения или объекты), и эти изменения будут копироваться в будущие базы данных.

Дополнительную информацию об этом можно найти в разделе «Шаблонные базы данных».

Если initdb пытается создать каталог, но не имеет на это прав (например, если родительский каталог принадлежит суперпользователю root), необходимо:

  1. От имени root создать пустую директорию для кластера.

  2. Изменить владельца этой директории на пользователя PostgreSQL с помощью команды chown.

  3. Переключиться на этого пользователя (su) и запустить initdb.

Внимание!

initdb нужно запускать от имени того пользователя, который будет владельцем серверного процесса, так как этот пользователь должен иметь доступ ко всем создаваемым файлам и каталогам. Запуск initdb от имени root запрещен — он просто не выполнится.

По умолчанию доступ к только что созданному кластеру имеет только владелец. Чтобы разрешить другим пользователям той же группы доступ к файлам кластера (например, для целей резервного копирования), используйте параметр --allow-group-access.

Во время инициализации initdb устанавливает параметры локали и кодировки для всего кластера по умолчанию. Эти значения затем наследуются всеми создаваемыми базами данных, если не указано иное. Параметры локали и кодировки также могут быть установлены отдельно для каждой базы данных при ее создании.

По умолчанию initdb использует провайдер локали libc, берет настройки из переменных окружения и определяет кодировку, исходя из параметров локали.

Чтобы указать конкретную локаль, используйте параметр --locale. Если нужно задать отдельные значения для разных аспектов локали (дата, числовые значения и т.д.), доступны параметры --lc-* (смотрите ниже). Обратите внимание, что несовместимые настройки для разных категорий локали могут привести к бессмысленным результатам, поэтому это следует использовать с осторожностью.

Альтернативно, можно выбрать библиотеку ICU, указав --locale-provider=icu, при этом также устанавливается значение по умолчанию только для баз данных, созданных впоследствии. Чтобы задать нужный идентификатор локали ICU, используйте параметр --icu-locale. Однако даже при использовании ICU, initdb все равно инициализирует базовые настройки локали через libc.

После запуска initdb будут выведены итоговые выбранные настройки локали. Если были указаны особые требования или комбинация параметров, проверьте, что результат соответствует ожиданиям.

Более подробную информацию о настройках локализации можно найти в разделе«Поддержка локали».

Чтобы изменить кодировку по умолчанию, используйте параметр --encoding. Подробнее описано в разделе «Поддержка набора символов».

Параметры

Для утилиты initdb существуют следующие параметры командной строки:

-A authmethod
--auth=authmethod

Устанавливает метод аутентификации по умолчанию для локальных пользователей в конфигурационном файле pg_hba.conf (строки host и local). Подробнее описано в разделе Файл pg_hba.conf.

initdb предварительно внесет указанный метод аутентификации в pg_hba.conf в записи как обычных соединений, так и соединений репликации.

Не рекомендуется использовать trust, если у нет полной уверенности в безопасности локальных пользователей. Тем не менее, по умолчанию выбирается trust для упрощения установки.

--auth-host=authmethod

Устанавливает метод аутентификации для TCP/IP соединений (строки host в pg_hba.conf).

--auth-local=authmethod

Устанавливает метод аутентификации для локальных соединений через Unix-сокеты (строки local в pg_hba.conf).

-D directory
--pgdata=directory

Указывает путь к каталогу, в котором будет размещен кластер баз данных. Параметр обязателен, но его можно указать в переменной окружения PGDATA, что будет удобным при дальнейшем использовании (postgres обращается к этой же переменной).

-E encoding
--encoding=encoding

Задает кодировку для шаблонных баз данных. Эта кодировка станет значением по умолчанию для всех новых баз данных.

Если используется libc, кодировка берется из локали, если ICU — будет использована UTF8 (по умолчанию). Наборы символов, поддерживаемые сервером PostgreSQL, описаны в разделе «Поддерживаемые наборы символов».

-g
--allow-group-access

Разрешает пользователям из той же группы, что и владелец кластера, доступ к файлам кластера. Игнорируется на Windows.

--icu-locale=locale

Задает идентификатор локали ICU, если используется провайдер ICU.

-k
--data-checksums

Включает контрольные суммы на страниц данных. Это помогает выявлять повреждения, вызванные сбоями ввода-вывода, но может повлиять на производительность.

Если параметр установлен, контрольные суммы рассчитываются для всех объектов во всех базах данных. Все сбои контрольных сумм будут видны в представлении pg_stat_database. Подробная информация представлена в разделе «Контрольные суммы данных».

--locale=locale

Устанавливает локаль по умолчанию для всего кластера. Если параметр не указан, используется локаль окружения, в которой выполняется initdb.

Поддержка локализации описана в разделе «Поддержка локали».

--lc-collate=locale
--lc-ctype=locale
--lc-messages=locale
--lc-monetary=locale
--lc-numeric=locale
--lc-time=locale

Устанавливают локаль по отдельным категориям. Применяется только к соответствующей категории, в отличие от --locale.

--no-locale

Эквивалентно --locale=C.

--locale-provider={``libc``|``icu``}

Задает провайдера локали для баз данных, созданных в новом кластере. Она может быть переопределена в команде CREATE DATABASE, когда впоследствии создаются новые базы данных. По умолчанию это libc.

-N
--no-sync

Завершает процесс initdb без ожидания записи файлов на диск. Ускоряет выполнение, но при последующем сбое операционной системы может привести к повреждению каталога данных. По умолчанию утилита ждет, пока все файлы будут надежно записаны на диск.

Параметр используется при тестировании и не предназначен для производственной среды.

--no-instructions

Подавляет вывод инструкций по запуску кластера после завершения initdb. По умолчанию, initdb будет записывать инструкции о том, как запустить кластер в конце своего вывода. Полезно для применения на платформах, где initdb используется в специальных высокоуровневых процедурах, в рамках которых данные инструкции оказываются некорректными.

--pwfile=filename

Считывает пароль суперпользователя из указанного файла. Используется первая строка файла.

-S
--sync-only

Принудительно записывает все данные на диск и завершает работу без инициализации. Используется, например, для обеспечения надежного восстановления после изменения fsync с off на on.

-T config
--text-search-config=config

Устанавливает конфигурацию текстового поиска по умолчанию. Подробнее описано в default_text_search_config.

-U username
--username=username

Устанавливает имя суперпользователя. По умолчанию совпадает с текущим пользователем ОС, запустившего initdb. По факту, само по себе имя суперпользователя базы данных не важно, но этот параметр позволяет оставить postgres, если имя пользователя ОС другое.

-W
--pwprompt

Принудительно запрашивает пароль суперпользователя во время выполнения. Это не важно, если не планируется использовать аутентификацию по паролю. В ином случае этот режим аутентификации оказывается неприменимым, пока пароль не задан.

-X directory
--waldir=directory

Указывает каталог для хранения файлов WAL.

--wal-segsize=size

Определяет размер сегмента WAL в мегабайтах. Это размер каждого отдельного файла в журнале WAL. Значение нельзя изменить после инициализации.

Размер по умолчанию составляет 16 мегабайт. Значение должно быть степенью двойки от 1 до 1024 (мегабайт).

Полезно для оптимизации работы WAL в зависимости от нагрузки и требований к архивированию. Кроме того, в базах данных с большим объемом WAL огромное количество файлов WAL в одном каталоге может стать проблемой производительности и управления. Увеличение размера файла WAL уменьшит количество файлов WAL.

-d
--debug

Выводит подробные отладочные сообщения, включая те, что генерируются вспомогательными процессами.

--discard-caches

Запускает вспомогательный процесс с параметром debug_discard_caches=1. Заметно замедляет выполнение, используется только для глубокого анализа.

-L directory

Определяет расположение входных файлов, необходимых initdb для создания кластера. Обычно не требуется.

-n
--no-clean

Не удаляет временные файлы при ошибке. По умолчанию, при выявлении ошибки на этапе развертывания кластера, initdb удаляет все файлы, которые к тому моменту были созданы. Параметр полезен для отладки неудачных запусков initdb.

-V
--version

Выводит версию initdb и завершается.

-?
--help

Показывает справку о параметрах командной строки утилиты initdb и завершается.

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

Утилита поддерживает переменные окружения:

PGDATA

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

PG_COLOR

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

TZ

Задает часовой пояс создаваемого кластера по умолчанию. Значение — полное имя часового пояса.

Утилита initdb использует переменные окружения, поддерживаемые libpq.

Примечания

initdb также может быть вызван через pg_ctl initdb.

Смотрите также

pg_ctl, postgres, Файл pg_hba.conf