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
. Базы данных эквивалентны каталогам, создание которых определяется реализацией.