CREATE DATABASE#

CREATE DATABASE

CREATE DATABASE

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 ]
           [ 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 создает новую базу данных Tantor BE.

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

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

Параметры

name #

Создать базу данных с указанным именем.

user_name #

Имя роли пользователя, который будет владельцем новой базы данных, или DEFAULT для использования значения по умолчанию (а именно, пользователя, выполняющего команду). Чтобы создать базу данных, принадлежащую другой роли, вы должны иметь возможность выполнить команду SET ROLE для этой роли.

template #

Имя шаблона, на основе которого создается новая база данных, или DEFAULT, чтобы использовать шаблон по умолчанию (template1).

encoding #

Кодировка набора символов, которую следует использовать в новой базе данных. Укажите строковую константу (например, 'SQL_ASCII'), или целое число кодировки, или DEFAULT, чтобы использовать кодировку по умолчанию (то есть кодировку шаблонной базы данных). Наборы символов, поддерживаемые сервером Tantor BE, описаны в разделе Раздел 22.3.1. Дополнительные ограничения см. ниже.

strategy #

Стратегия, которая будет использоваться при создании новой базы данных. Если используется стратегия WAL_LOG, база данных будет копироваться блок за блоком, и каждый блок будет отдельно записываться в журнал предварительной записи. Это наиболее эффективная стратегия в случаях, когда шаблонная база данных небольшая, поэтому она является значением по умолчанию. Доступна также более старая стратегия FILE_COPY. Эта стратегия записывает небольшую запись в журнал предварительной записи для каждого табличного пространства, используемого целевой базой данных. Каждая такая запись представляет собой копирование всего каталога в новое местоположение на уровне файловой системы. Хотя это существенно сокращает объем журнала предварительной записи, особенно если шаблонная база данных большая, это также заставляет систему выполнять контрольную точку как перед, так и после создания новой базы данных. В некоторых ситуациях это может оказать заметное негативное влияние на общую производительность системы.

locale #

Устанавливает порядок сортировки по умолчанию и классификацию символов в новой базе данных. Правило сортировки влияет на порядок сортировки строк, например, в запросах с ORDER BY, а также на порядок, используемый в индексах по текстовым столбцам. Классификация символов влияет на категоризацию символов, например, строчные, прописные и цифры. Также устанавливает связанные аспекты окружения операционной системы, LC_COLLATE и LC_CTYPE. По умолчанию используется та же настройка, что и в шаблонной базе данных. См. Раздел 22.2.2.3.1 и Раздел 22.2.2.3.2 для подробностей.

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

Подсказка

Другие настройки локали 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.

icu_locale #

Указывает локаль ICU (см. Раздел 22.2.2.3.2) для порядка сортировки по умолчанию в базе данных и классификации символов, переопределяя настройку locale. Поставщик локали должен быть ICU. По умолчанию используется настройка locale, если она указана; в противном случае используется та же настройка, что и в шаблонной базе данных.

icu_rules #

Указывает дополнительные правила сортировки для настройки поведения сопоставления по умолчанию для этой базы данных. Это поддерживается только для ICU. См. Раздел 22.2.3.4 для подробностей.

locale_provider #

Указывает поставщика, который будет использоваться для правил сортировки по умолчанию в этой базе данных. Возможные значения: icu (если сервер был построен с поддержкой ICU) или libc. По умолчанию, провайдер такой же, как у template. Подробности см. в Раздел 22.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 #

Идентификатор объекта, который будет использоваться для новой базы данных. Если этот параметр не указан, Tantor BE автоматически выберет подходящий OID. Этот параметр в основном предназначен для внутреннего использования pg_upgrade, и только pg_upgrade может указать значение меньше 16384.

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

Примечания

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

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

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

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

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

Хотя возможно скопировать базу данных, отличную от template1, указав ее имя в качестве шаблона, это не (пока) предназначено для общего использования как средство COPY DATABASE. Основное ограничение заключается в том, что никакие другие сессии не могут быть подключены к шаблонной базе данных во время ее копирования. CREATE DATABASE завершится с ошибкой, если существует другое подключение при его запуске; в противном случае, новые подключения к шаблонной базе данных будут заблокированы до завершения CREATE DATABASE. См. Раздел 21.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 с табличным пространствoм по умолчанию в пространстве таблиц 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