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 ]
           [ 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 SE.

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

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

Параметры

name

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

user_name

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

template

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

encoding

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

strategy

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

locale

Это является сокращением для одновременной установки LC_COLLATE и LC_CTYPE.

Подсказка

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

lc_collate

Порядок сортировки (LC_COLLATE), используемый в новой базе данных. Это влияет на порядок сортировки, применяемый к строкам, например, в запросах с ORDER BY, а также на порядок, используемый в индексах на столбцах с типом text. По умолчанию используется порядок сортировки шаблонной базы данных. См. ниже дополнительные ограничения.

lc_ctype

Классификация символов (LC_CTYPE), используемая в новой базе данных. Это влияет на категоризацию символов, например, нижний регистр, верхний регистр и цифры. По умолчанию используется классификация символов шаблонной базы данных. См. ниже дополнительные ограничения.

icu_locale

Указывает идентификатор ICU локали, если используется поставщик ICU локали.

locale_provider

Указывает провайдера, который будет использоваться для правила сортировки по умолчанию в этой базе данных. Возможные значения: icu, libc. libc является значением по умолчанию. Доступные варианты зависят от операционной системы и параметров сборки.

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 SE автоматически выберет подходящий OID. Этот параметр в основном предназначен для внутреннего использования pg_upgrade, и только pg_upgrade может указать значение меньше 16384.

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

Примечания

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

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

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

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

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

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