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), то разрешены все кодировки, но для других параметров локали есть только одна кодировка, которая будет работать должным образом. 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