CREATE DATABASE

CREATE DATABASE — создать новую базу данных

Синтаксис

CREATE DATABASE имя
    [ [ WITH ] [ OWNER [=] имя_пользователя ]
           [ TEMPLATE [=] шаблон ]
           [ ENCODING [=] кодировка ]
           [ LOCALE [=] локаль ]
           [ LC_COLLATE [=] категория_сортировки ]
           [ LC_CTYPE [=] категория_типов_символов ]
           [ TABLESPACE [=] имя_табличного_пространства ]
           [ ALLOW_CONNECTIONS [=] разр_подключения ]
           [ CONNECTION LIMIT [=] предел_подключений ]
           [ IS_TEMPLATE [=] это_шаблон ] ]

Описание

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

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

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

Параметры

имя

Имя создаваемой базы данных.

имя_пользователя

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

шаблон

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

кодировка

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

локаль

Это краткая форма задания двух параметров, LC_COLLATE и LC_TYPE, сразу. При указании этой формы нельзя задать данные параметры по отдельности.

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

категория_сортировки

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

категория_типов_символов

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

имя_табличного_пространства

Имя табличного пространства, которое будет связано с новой базой данных, или DEFAULT, чтобы использовать табличное пространство шаблона базы данных. Это табличное пространство будет табличным пространством по умолчанию, используемым для объектов, созданных в этой базе данных. Дополнительную информацию см. в разделе CREATE TABLESPACE.

разрешение_подключения

Если установлено значение false, то никто не может подключиться к этой базе данных. По умолчанию установлено значение true, разрешающее подключения (за исключением случаев, ограниченных другими механизмами, такими как GRANT/REVOKE CONNECT).

предел_подключений

Предельное число одновременных подключений, которое может быть сделано к этой базе данных. -1 (по умолчанию) означает отсутствие ограничений.

это_шаблон

Если установлено значение true, то эта база данных может быть клонирована любым пользователем с правами CREATEDB; если стоит значение false (по умолчанию), то клонировать базу данных могут только суперпользователи или владелец базы данных.

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

Примечания

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

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

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

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

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

Хотя можно скопировать не только template1, но и другую базу данных, указав ее имя в качестве шаблона, данная команда не предназначена (пока) для использования в качестве универсального средства вроде «COPY DATABASE». Основное ограничение заключается в том, что во время копирования никто не должен быть подключен к базе данных, указанной в качестве шаблона. CREATE DATABASE завершится ошибкой, если при запуске команды есть другие подключения к этой базе; в противном случае новые соединения с базой данных шаблона будут заблокированы до завершения процесса CREATE DATABASE. Дополнительную информацию см. в разделе Базы данных шаблонов.

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

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

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

Примеры

Создание базы данных:

CREATE DATABASE lusiadas;

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

CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;

Создание базы данных music с другой локалью:

CREATE DATABASE music
    LC_COLLATE 'sv_SE.utf8' LC_CTYPE 'sv_SE.utf8'
    TEMPLATE template0;

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

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

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

Свойства кодировки должны соответствовать свойствам локали, иначе возникнет ошибка.

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

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

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

См. также

ALTER DATABASE, DROP DATABASE