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

CREATE DATABASE

примечание

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

CREATE DATABASE – создание новой базы данных.

Синтаксис

CREATE DATABASE name
[ WITH ] [ OWNER [=] user_name ]
[ TEMPLATE [=] template ]
[ ENCODING [=] encoding ]
[ STRATEGY [=] strategy ]
[ LOCALE [=] locale ]
[ LC_COLLATE [=] lc_collate ]
[ LC_CTYPE [=] lc_ctype ]
[ BUILTIN_LOCALE [=] builtin_locale ]
[ ICU_LOCALE [=] icu_locale ]
[ ICU_RULES [=] icu_rules ]
[ LOCALE_PROVIDER [=] locale_provider ]
[ COLLATION_VERSION = collation_version ]
[ TABLESPACE [=] tablespace_name ]
[ ALLOW_CONNECTIONS [=] allowconn ]
[ CONNECTION LIMIT [=] connlimit ]
[ IS_TEMPLATE [=] istemplate ]
[ OID [=] oid ]

Описание

CREATE DATABASE создает новую базу данных PostgreSQL.

Создать базу данных может только суперпользователь или лицо, обладающее специальной привилегией CREATEDB. Подробнее смотрите в документе CREATE ROLE.

Новая база данных создается путем клонирования стандартной системной базы данных template1. При желании можно указать иной шаблон, записав TEMPLATE name. В частности, выбор шаблона template0 создает пустую базу данных, содержащую только базовые системные объекты текущей версии PostgreSQL, без пользовательских объектов и изменений конфигурации. Этот вариант полезен, если необходимо исключить влияние локально установленных компонентов на структуру создаваемой базы данных.

Параметры

name
Имя базы данных для создания.
user_name
Имя роли пользователя, который будет владельцем новой базы данных, либо DEFAULT, чтобы использовать значение по умолчанию (то есть имя пользователя, выполняющего команду). Чтобы создать базу данных, принадлежащую другому пользователю, необходимо иметь право SET ROLE для этой роли.
template
Имя шаблона, из которого будет создана новая база данных, или DEFAULT для использования шаблона по умолчанию (template1).
encoding
Кодировка набора символов, которую следует использовать в новой базе данных. Укажите строку-константу (например, 'SQL_ASCII'), целое число кодировки или DEFAULT для использования кодировки по умолчанию (а именно, кодировки шаблонной базы данных).
strategy
Стратегия, которая должна использоваться при создании новой базы данных. Если используется стратегия WAL_LOG, база данных будет копироваться блок за блоком, и каждый блок будет записываться отдельно в журнал записи с опережением. Это наиболее эффективная стратегия в случаях, когда шаблонная база данных мала, поэтому она является стандартной. Также доступна более старая стратегия FILE_COPY. Эта стратегия записывает небольшую запись в журнал записи с опережением для каждого табличного пространства, используемого целевой базой данных. Каждая такая запись представляет собой копирование целого каталога в новое место на уровне файловой системы. Хотя это значительно сокращает объем журнала записи с опережением, особенно если шаблонная база данных велика, это также вынуждает систему выполнять контрольную точку как до, так и после создания новой базы данных. В некоторых ситуациях это может оказать заметное негативное влияние на общую производительность системы.
locale
Задает порядок сортировки по умолчанию и классификацию символов в новой базе данных. Сортировка влияет на порядок сортировки строк, например, в запросах с ORDER BY, а также на порядок, используемый для индексов по текстовым столбцам. Классификация символов влияет на категоризацию символов, например, нижний регистр, верхний регистр и цифры. Также задает связанные аспекты среды операционной системы, LC_COLLATE и LC_CTYPE. Значение по умолчанию — это та же настройка, что и у шаблонной базы данных.

Может быть переопределено путем установки lc_collate, lc_ctype, builtin_locale или icu_locale индивидуально.

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

Совет

Другие настройки локали lc_messages, lc_monetary, lc_numeric и lc_time не фиксируются для каждой базы данных и не устанавливаются этой командой. Настройки можно сделать значениями по умолчанию для конкретной базы данных с помощью команды ALTER DATABASE ... SET.

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

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

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

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

builtin_locale
Определяет встроенный провайдер локализации для порядка сортировки и классификации символов по умолчанию в базе данных, переопределяя настройку locale. Провайдер локализации locale provider должен быть builtin. Значением по умолчанию является значение locale, если оно указано, в противном случае то же самое значение, что и у шаблонной базы данных.

Локализации, доступные для провайдера builtin, — это C и C.UTF-8.

icu_locale
Определяет локализацию ICU для порядка сортировки и классификации символов по умолчанию в базе данных, переопределяя настройку locale. Провайдер локализации locale provider должен быть ICU. Значением по умолчанию является значение locale, если оно указано, в противном случае то же самое значение, что и у шаблонной базы данных.
icu_rules
Задает дополнительные правила сортировки для настройки поведения стандартной сортировки этой базы данных. Это поддерживается только для ICU.
locale_provider
Определяет поставщика, который будет использоваться для стандартной сортировки в этой базе данных. Возможные значения — это builtin, icu (если сервер был собран с поддержкой ICU) или libc. По умолчанию поставщик тот же, что и у template.
collation_version
Задает строку версии сопоставления для хранения с базой данных. Обычно это следует опускать, что приведет к вычислению версии из фактической версии сопоставления базы данных, предоставляемой операционной системой. Эта опция предназначена для использования pg_upgrade для копирования версии из существующей установки.

Смотрите также ALTER DATABASE о том, как обрабатывать несовпадения версий сопоставления баз данных.

tablespace_name
Имя табличного пространства, которое будет связано с новой базой данных, или DEFAULT для использования табличного пространства шаблона базы данных. Это табличное пространство будет использоваться по умолчанию для объектов, созданных в этой базе данных. См. CREATE TABLESPACE для получения дополнительной информации.
allowconn
Если false, то никто не сможет подключиться к этой базе данных. По умолчанию установлено значение true, что позволяет устанавливать соединения (за исключением ограничений, установленных другими механизмами, такими как GRANT/REVOKE CONNECT).
connlimit
Сколько одновременных соединений может быть установлено с этой базой данных. -1 (значение по умолчанию) означает отсутствие ограничений.
istemplate
Если true, то эта база данных может быть клонирована любым пользователем с привилегиями CREATEDB; если false (по умолчанию), то только суперпользователи или владелец базы данных могут клонировать ее.
oid
Идентификатор объекта, который будет использоваться для новой базы данных. Если этот параметр не указан, PostgreSQL автоматически выберет подходящий OID. Этот параметр предназначен главным образом для внутреннего использования pg_upgrade, и только pg_upgrade может указать значение меньше 16384.

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

Примечания

CREATE DATABASE не может быть выполнен внутри блока транзакций.

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

Используйте DROP DATABASE, чтобы удалить базу данных.

Программа createdb является оберткой вокруг этой команды, предоставляемой для удобства.

Параметры конфигурации уровня базы данных (установленные с помощью ALTER DATABASE) и разрешения уровня базы данных (установленные с помощью GRANT) не копируются из шаблонной базы данных.

Хотя возможно копировать базу данных, отличную от template1 путем указания ее имени в качестве шаблона, это еще не предназначено для использования в общем случае в качестве средства " COPY DATABASE ". Основное ограничение заключается в том, что ни одно другое сеансное соединение не может быть подключено к шаблонной базе данных во время ее копирования. CREATE DATABASE завершится ошибкой, если существует какое-либо другое подключение при его запуске; в противном случае новые подключения к шаблонной базе данных блокируются до завершения работы CREATE DATABASE.

Кодировка набора символов, указанная для новой базы данных, должна соответствовать выбранным настройкам локализации (LC_COLLATE и LC_CTYPE). Если локаль равна C (или эквивалентно POSIX), то разрешены все кодировки, но для других настроек локали есть только одна кодировка, которая будет работать должным образом. (Однако в Windows с любой локалью можно использовать кодировку UTF-8.) CREATE DATABASE позволит суперпользователям указать кодировку SQL_ASCII независимо от настроек локали, но этот выбор устарел и может привести к неправильному поведению функций строки символов, если данные, которые несовместимы с кодировкой локали, хранятся в базе данных.

Настройки кодировки и локали должны совпадать с настройками шаблонной базы данных, за исключением случаев, когда используется template0 в качестве шаблона. Это связано с тем, что другие базы данных могут содержать данные, которые не соответствуют указанной кодировке, или могут содержать индексы, порядок сортировки которых зависит от LC_COLLATE и LC_CTYPE. Копирование таких данных приведет к созданию базы данных, которая согласно новым настройкам будет повреждена. Однако известно, что template0 не содержит никаких данных или индексов, которые были бы затронуты.

В настоящее время нет возможности использовать локаль базы данных с неопределенными сравнениями (смотрите CREATE COLLATION для объяснения). Если это необходимо, то потребуется использовать сравнение по столбцам.

Параметр CONNECTION LIMIT применяется только приблизительно; если два новых сеанса начнутся примерно одновременно, когда остается всего одно соединение «слот» для базы данных, возможно, оба завершатся неудачно. Кроме того, ограничение не распространяется на суперпользователей или фоновые рабочие процессы.

Примеры

Для создания новой базы данных:

CREATE DATABASE lusiadas;

Чтобы создать базу данных sales, принадлежащую пользователю salesapp с таблицей пространства по умолчанию salesspace:

CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;

Чтобы создать базу данных music с другим локалем:

CREATE DATABASE music
LOCALE 'sv_SE.utf8'
TEMPLATE template0;

В этом примере предложение TEMPLATE template0 требуется, если указанный локаль отличается от того, что в template1. Если это не так, то явное указание локали является избыточным.

Чтобы создать базу данных music2 с другим локалем и другой кодировкой набора символов:

CREATE DATABASE music2
LOCALE 'sv_SE.iso885915'
ENCODING LATIN9
TEMPLATE template0;

Указанные настройки локали и кодировки должны совпадать, иначе будет сообщена об ошибке.

Обратите внимание, что имена локалей зависят от операционной системы, поэтому приведенные выше команды могут не работать одинаково везде.

Совместимость

В стандарте SQL нет команды CREATE DATABASE. Базы данных эквивалентны каталогам, создание которых определяется реализацией.

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

ALTER DATABASE, DROP DATABASE