CREATE DATABASE — создание новой базы данных
CREATE DATABASEname[ 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 создает новую базу данных Digital Q.DataBase.
Чтобы создать базу данных, вы должны быть суперпользователем или иметь специальную привилегию CREATEDB. См. CREATE ROLE.
По умолчанию новая база данных создаётся путём клонирования стандартной системной базы данных template1. Можно указать другой шаблон, написав TEMPLATE . В частности, написав nameTEMPLATE template0, вы можете создать чистую базу данных (в которой нет пользовательских объектов и системные объекты не изменены), содержащую только стандартные объекты, предопределённые вашей версией Digital Q.DataBase. Это полезно, если вы хотите избежать копирования любых объектов, специфичных для данной установки, которые могли быть добавлены в template1.
name #Имя создаваемой базы данных.
user_name #
Имя роли пользователя, который будет владеть новой базой данных, или DEFAULT для использования значения по умолчанию (а именно, пользователя, выполняющего команду). Чтобы создать базу данных, владельцем которой является другая роль, вы должны иметь возможность выполнить SET ROLE для этой роли.
template #
Имя шаблона, из которого создаётся новая база данных, или DEFAULT для использования шаблона по умолчанию (template1).
encoding #
Кодировка символов, используемая в новой базе данных. Укажите строковую константу (например, 'SQL_ASCII'), целочисленный номер кодировки или DEFAULT для использования кодировки по умолчанию (а именно, кодировки базы данных-шаблона). Наборы символов, поддерживаемые сервером Digital Q.DataBase, описаны в Раздел 3.8.3.1. См. ниже дополнительные ограничения.
strategy #
Стратегия, используемая при создании новой базы данных. Если используется стратегия WAL_LOG, база данных копируется блоками, и каждый блок отдельно записывается в опережающий журнал (write-ahead log). Это наиболее эффективная стратегия в случаях, когда база данных-шаблон мала, и поэтому она используется по умолчанию. Также доступна более старая стратегия FILE_COPY. Эта стратегия записывает небольшую запись в опережающий журнал для каждого табличного пространства, используемого целевой базой данных. Каждая такая запись представляет копирование целого каталога в новое место на уровне файловой системы. Хотя это существенно сокращает объём опережающего журнала, особенно если база данных-шаблон велика, это также заставляет систему выполнять контрольную точку как до, так и после создания новой базы данных. В некоторых ситуациях это может оказать заметное негативное влияние на общую производительность системы.
locale #
Устанавливает порядок сортировки по умолчанию и классификацию символов в новой базе данных. Сортировка влияет на порядок сортировки, применяемый к строкам, например, в запросах с ORDER BY, а также на порядок, используемый в индексах по текстовым столбцам. Классификация символов влияет на категоризацию символов, например, строчные, прописные и цифры. Также устанавливает соответствующие аспекты окружения операционной системы, LC_COLLATE и LC_CTYPE. По умолчанию используются те же настройки, что и у базы данных-шаблона. Подробности см. в разделах Раздел 3.8.2.2.3.1 и Раздел 3.8.2.2.3.2.
Может быть переопределена путём индивидуальной установки параметров 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 #
Задаёт локаль поставщика builtin для порядка сортировки по умолчанию и классификации символов базы данных, переопределяя настройку locale. Поставщик локали должен быть builtin. По умолчанию используется значение параметра locale, если он указан; в противном случае — то же значение, что и у базы данных-шаблона.
Локали, доступные для поставщика builtin, — это C и C.UTF-8.
icu_locale #
Задаёт локаль ICU (см. Раздел 3.8.2.2.3.2) для порядка сортировки по умолчанию и классификации символов базы данных, переопределяя настройку locale. Поставщик локали должен быть ICU. По умолчанию используется значение параметра locale, если он указан; в противном случае — то же значение, что и у базы данных-шаблона.
icu_rules #Задаёт дополнительные правила сортировки для настройки поведения сортировки по умолчанию в этой базе данных. Поддерживается только для ICU. Подробности см. в разделе Раздел 3.8.2.3.4.
locale_provider #
Указывает поставщика для сортировки по умолчанию в этой базе данных. Возможные значения: builtin, icu (если сервер собран с поддержкой ICU) или libc. По умолчанию используется тот же поставщик, что и у template. Подробности см. в разделе Раздел 3.8.1.4.
collation_version #
Задаёт строку версии сортировки для хранения вместе с базой данных. Обычно её следует опускать, что приведёт к вычислению версии на основе фактической версии сортировки базы данных, предоставляемой операционной системой. Этот параметр предназначен для использования утилитой pg_upgrade для копирования версии из существующей установки.
См. также ALTER DATABASE о том, как обрабатывать несоответствия версий сортировки в базе данных.
tablespace_name #
Имя табличного пространства, которое будет связано с новой базой данных, или DEFAULT для использования табличного пространства базы данных-шаблона. Это табличное пространство будет использоваться по умолчанию для объектов, создаваемых в этой базе данных. Подробнее см. CREATE TABLESPACE.
allowconn #
Если false, то никто не может подключиться к этой базе данных. По умолчанию — true, разрешая подключения (если они не ограничены другими механизмами, такими как GRANT/REVOKE CONNECT).
connlimit #Сколько одновременных подключений может быть установлено к этой базе данных. Значение -1 (по умолчанию) означает отсутствие ограничения.
istemplate #
Если true, то эту базу данных может клонировать любой пользователь с привилегиями CREATEDB; если false (по умолчанию), то клонировать её могут только суперпользователи или владелец базы данных.
oid #Идентификатор объекта, который будет использоваться для новой базы данных. Если этот параметр не указан, Digital Q.DataBase выберет подходящий OID автоматически. Этот параметр в первую очередь предназначен для внутреннего использования утилитой pg_upgrade, и только pg_upgrade может указывать значение меньше 16384.
Необязательные параметры могут быть записаны в любом порядке, не только в порядке, указанном выше.
Команду CREATE DATABASE нельзя выполнять внутри блока транзакции.
Ошибки типа «не удалось инициализировать каталог базы данных» скорее всего связаны с недостаточными правами на каталог данных, переполнением диска или другими проблемами файловой системы.
Используйте DROP DATABASE для удаления базы данных.
Программа createdb — это программа-обёртка для данной команды, предоставляемая для удобства.
Параметры конфигурации на уровне базы данных (устанавливаемые через ALTER DATABASE) и разрешения на уровне базы данных (устанавливаемые через GRANT) не копируются из базы данных-шаблона.
Хотя можно скопировать базу данных, отличную от template1, указав её имя в качестве шаблона, это (пока) не предназначено для универсальной функции «COPY DATABASE». Основное ограничение заключается в том, что во время копирования к базе данных-шаблону не должно быть подключений других сеансов. Команда CREATE DATABASE завершится ошибкой, если при её запуске существуют любые другие подключения; в противном случае новые подключения к базе данных-шаблону блокируются до завершения CREATE DATABASE. Подробнее см. Раздел 3.7.3.
Кодировка набора символов, указанная для новой базы данных, должна быть совместима с выбранными настройками локали (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. Базы данных эквивалентны каталогам, создание которых определяется реализацией.