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

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 определяет эти настройки для шаблонных баз данных, которые будут служить значением по умолчанию для всех других баз данных.

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

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

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

После запуска 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
Выбирает кодировку шаблонных баз данных. Это также будет кодировкой по умолчанию для любой базы данных, которую создадите позже, если явно не укажете другую. Наборы символов, поддерживаемые сервером PostgreSQL, описаны в «Поддержка кодировок».

По умолчанию кодировка шаблона базы данных выводится из локали. Если указано --no-locale (или эквивалентно, если локаль — это C или POSIX), тогда значением по умолчанию является UTF8 для поставщика ICU и SQL_ASCII для поставщика libc.

-g
--allow-group-access
Разрешает пользователям из той же группы, что и владелец кластера, доступ к файлам кластера. Игнорируется на Windows.
--icu-locale=locale
Задает локаль ICU при использовании поставщика ICU. Поддержка языковых стандартов описана в разделе «Поддержка языковых стандартов».
--icu-rules=rules
Определяет дополнительные правила сортировки для настройки поведения стандартной сортировки. Данная возможность поддерживается только для ICU.
-k
--data-checksums
Включает контрольные суммы на страниц данных. Это помогает выявлять повреждения, вызванные сбоями ввода-вывода, но может повлиять на производительность.

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

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

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

Если значение --locale-provider равно builtin, необходимо указать и установить значения --locale, --builtin-locale равными C или C.UTF-8.

--lc-collate=locale
--lc-ctype=locale
--lc-messages=locale
--lc-monetary=locale
--lc-numeric=locale
--lc-time=locale
Устанавливают локаль по отдельным категориям. Применяется только к соответствующей категории, в отличие от --locale.
--no-locale
Эквивалентно --locale=C.
--builtin-locale=locale
Указывает имя локали при использовании встроенного провайдера.
--locale-provider={builtin|libc|icu}
Эта опция задает поставщик локалей для баз данных, создаваемых в новом кластере. Ее можно переопределить командой CREATE DATABASE при последующем создании новых баз данных. Значение по умолчанию — libc.
--pwfile=filename
Считывает пароль суперпользователя из указанного файла. Используется первая строка файла.
-T config
--text-search-config=config
Устанавливает конфигурацию текстового поиска по умолчанию. Подробнее описано в default_text_search_config.
-U username
--username=username
Устанавливает имя пользователя суперпользователя начальной загрузки. По умолчанию используется имя пользователя операционной системы, под которым выполняется программа initdb.
-W
--pwprompt
Принудительно запрашивает пароль начального суперпользователя во время выполнения. Это не важно, если не планируется использовать аутентификацию по паролю. В ином случае этот режим аутентификации оказывается неприменимым, пока пароль не задан.
-X directory
--waldir=directory
Указывает каталог для хранения файлов WAL.
--wal-segsize=size
Определяет размер сегмента WAL в мегабайтах. Это размер каждого отдельного файла в журнале WAL. Значение нельзя изменить после инициализации.

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

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

-c name=value
--set name=value
Принудительно устанавливает параметр сервера name в значение value во время выполнения команды initdb, а также сохраняет эту настройку в файле postgresql.conf, чтобы она применялась при последующих запусках сервера. Эту опцию можно указывать несколько раз, чтобы задать несколько параметров. Она особенно полезна, когда окружающая среда такова, что сервер вообще не сможет запуститься с параметрами по умолчанию.
-d
--debug
Выводит подробные отладочные сообщения, включая те, что генерируются вспомогательными процессами.
--discard-caches
Запускает вспомогательный процесс с параметром debug_discard_caches=1. Заметно замедляет выполнение, используется только для глубокого анализа.
-L directory
Определяет расположение входных файлов, необходимых initdb для создания кластера. Обычно не требуется.
-n
--no-clean
Не удаляет временные файлы при ошибке. По умолчанию, при выявлении ошибки на этапе развертывания кластера, initdb удаляет все файлы, которые к тому моменту были созданы. Параметр полезен для отладки неудачных запусков initdb.
-N
--no-sync
По умолчанию, initdb будет ожидать завершения записи всех файлов на диск безопасно. Этот параметр заставляет initdb вернуть управление без ожидания, что быстрее, но означает, что последующий крах операционной системы может оставить каталог данных поврежденным. Обычно этот параметр полезен для тестирования, но его не следует использовать при создании производственной установки.
--no-instructions
По умолчанию, initdb запишет инструкции по запуску кластера в конце своего вывода. Данный параметр приводит к тому, что эти инструкции будут опущены. Это в первую очередь предназначено для использования инструментами, которые заключают initdb в поведение, специфичное для платформы, где эти инструкции могут оказаться неверными.
-s
--show
Показать внутренние настройки и выйти, ничего больше не делая. Это можно использовать для отладки установки initdb.
--sync-method=method
При значении fsync, которое является значением по умолчанию, initdb рекурсивно откроет и синхронизирует все файлы в каталоге данных. Поиск файлов будет следовать символическим ссылкам для каталога WAL и каждого настроенного табличного пространства.

В Linux вместо этого можно использовать syncfs, чтобы попросить операционную систему синхронизировать всю файловую систему, содержащую каталог данных, файлы WAL и каждое табличное пространство.

Этот параметр не оказывает никакого эффекта при использовании --no-sync.

-S
--sync-only
Надежно записать все файлы базы данных на диск и завершить работу. Эта операция не выполняет никаких обычных операций initdb. В общем случае данный параметр полезен для обеспечения надежного восстановления после изменения параметра fsync с off на on.
-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