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