CREATE DATABASE
CREATE DATABASE — создать базу данных
Синтаксис
CREATE DATABASEимя
[ [ WITH ] [ OWNER [=]имя_пользователя
] [ TEMPLATE [=]шаблон
] [ ENCODING [=]кодировка
] [ LC_COLLATE [=]категория_сортировки
] [ LC_CTYPE [=]категория_типов_символов
] [ TABLESPACE [=]табл_пространство
] [ ALLOW_CONNECTIONS [=]разр_подключения
] [ CONNECTION LIMIT [=]предел_подключений
] [ IS_TEMPLATE [=]это_шаблон
] ]
Описание
Команда CREATE DATABASE
создаёт базу данных Postgres Pro.
Чтобы создать базу данных, необходимо быть суперпользователем или иметь специальное право CREATEDB
. См. CREATE USER.
По умолчанию новая база данных создаётся копированием стандартной системной базы данных template1
. Задать другой шаблон можно, добавив указание TEMPLATE
. В частности, написав имя
TEMPLATE template0
, можно создать девственно чистую базу данных, содержащую только стандартные объекты, предопределённые установленной версией Postgres Pro. Это бывает полезно, когда копировать в новую базу любые дополнительные объекты, добавленные локально в template1
, нежелательно.
Параметры
имя
Имя создаваемой базы данных.
имя_пользователя
Имя пользователя (роли), назначаемого владельцем новой базы данных, либо
DEFAULT
, чтобы владельцем стал пользователь по умолчанию (а именно, пользователь, выполняющий команду). Чтобы создать базу данных и сделать её владельцем другую роль, необходимо быть непосредственным или опосредованным членом этой роли, либо суперпользователем.шаблон
Имя шаблона, из которого будет создаваться новая база данных, либо
DEFAULT
, чтобы выбрать шаблон по умолчанию (template1
).кодировка
Кодировка символов в новой базе данных. Укажите строковую константу (например,
'SQL_ASCII'
) или целочисленный номер кодировки, либоDEFAULT
, чтобы выбрать кодировку по умолчанию (а именно, кодировку шаблона). Наборы символов, которые поддерживает Postgres Pro, перечислены в Подразделе 23.3.1. Дополнительные ограничения описаны ниже.категория_сортировки
Порядок сортировки (
LC_COLLATE
), который будет использоваться в новой базе данных. Этот параметр определяет порядок сортировки строк, например, в запросах с ORDER BY, а также порядок индексов по текстовым столбцам. По умолчанию используется порядок сортировки, установленный в шаблоне. Дополнительные ограничения описаны ниже.категория_типов_символов
Классификация символов (
LC_CTYPE
), которая будет применяться в новой базе данных. Этот параметр определяет принадлежность символов категориям, например: строчные, заглавные, цифры и т. п. По умолчанию используется классификация символов, установленная в шаблоне. Дополнительные ограничения описаны ниже.табл_пространство
Имя табличного пространства, связываемого с новой базой данных, или
DEFAULT
для использования табличного пространства шаблона. Это табличное пространство будет использоваться по умолчанию для объектов, создаваемых в этой базе. За подробностями обратитесь к CREATE TABLESPACE.разр_подключения
Если false, никто не сможет подключаться к этой базе данных. По умолчанию имеет значение true, то есть подключения принимаются (если не ограничиваются другими механизмами, например,
GRANT
/REVOKE CONNECT
).предел_подключений
Максимальное количество одновременных подключений к этой базе данных. Значение -1 (по умолчанию) снимает ограничение.
это_шаблон
Если true, базу данных сможет клонировать любой пользователь с правами
CREATEDB
; в противном случае (по умолчанию), клонировать эту базу смогут только суперпользователи и её владелец.
Дополнительные параметры могут записываться в любом порядке, не обязательно так, как показано выше.
Замечания
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
определённо не содержит какие-либо данные или индексы, зависящие от кодировки или локали.
Ограничение CONNECTION LIMIT
действует только приблизительно; если одновременно запускаются два сеанса, тогда как в базе остаётся только одно «свободное место», может так случиться, что будут отклонены оба подключения. Кроме того, это ограничение не распространяется на суперпользователей и фоновые рабочие процессы.
Примеры
Создание базы данных:
CREATE DATABASE lusiadas;
Создание базы данных sales
, принадлежащей пользователю salesapp
, с табличным пространством по умолчанию salesspace
:
CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;
Создание базы данных music
с кодировкой ISO-8859-1:
CREATE DATABASE music ENCODING 'LATIN1' TEMPLATE template0;
В этом примере предложение TEMPLATE template0
будет необходимым, только если кодировка template1
отличается от ISO-8859-1. Заметьте, что при смене кодировки может потребоваться также выбрать другие параметры LC_COLLATE
и LC_CTYPE
.
Совместимость
Оператор CREATE DATABASE
отсутствует в стандарте SQL. Базы данных равнозначны каталогам, а их создание в стандарте определяется реализацией.