22.2. Создание базы данных
Для создания базы данных сервер Postgres Pro должен быть развёрнут и запущен (см. Раздел 18.3).
База данных создаётся SQL-командой CREATE DATABASE:
CREATE DATABASE имя
;
где имя
подчиняется правилам именования идентификаторов SQL. Текущий пользователь автоматически назначается владельцем. Владелец может удалить свою базу, что также приведёт к удалению всех её объектов, в том числе, имеющих других владельцев.
Создание баз данных это привилегированная операция. Как предоставить права доступа, описано в Разделе 21.2.
Поскольку для выполнения команды CREATE DATABASE
необходимо подключение к серверу базы данных, возникает вопрос как создать самую первую базу данных. Первая база данных всегда создаётся командой initdb
при инициализации пространства хранения данных (см. Раздел 18.2.) Эта база данных называется postgres
. Далее для создания первой «обычной» базы данных можно подключиться к postgres
.
Вторая база данных template1
, также создаётся во время инициализации кластера. При каждом создании новой базы данных в рамках кластера по факту производится клонирование шаблона template1
. При этом любые изменения, сделанные в template1
распространяются на все созданные впоследствии базы данных. Следует избегать создания объектов в template1
, за исключением ситуации, когда их необходимо автоматически добавлять в новые базы. Более подробно в Разделе 22.3.
Для удобства, есть утилита командной строки для создания баз данных, createdb
.
createdb dbname
Утилита createdb
не делает ничего волшебного, она просто подключается к базе данных postgres
и выполняет ранее описанную SQL-команду CREATE DATABASE
. Подробнее о её вызове можно узнать в createdb. Обратите внимание, что команда createdb
без параметров создаст базу данных с именем текущего пользователя.
Примечание
Глава 20 содержит информацию о том, как ограничить права на подключение к заданной базе данных.
Иногда необходимо создать базу данных для другого пользователя и назначить его владельцем, чтобы он мог конфигурировать и управлять ею. Для этого используйте одну из следующих команд:
CREATE DATABASEимя_базы
OWNERимя_роли
;
из среды SQL, или:
createdb -Oимя_роли
имя_базы
из командной строки ОС. Лишь суперпользователь может создавать базы данных для других (для ролей, членом которых он не является).
DESCRIBE
DESCRIBE — obtain information about a prepared statement or result set
Synopsis
DESCRIBE [ OUTPUT ]prepared_name
USING [ SQL ] DESCRIPTORdescriptor_name
DESCRIBE [ OUTPUT ]prepared_name
INTO [ SQL ] DESCRIPTORdescriptor_name
DESCRIBE [ OUTPUT ]prepared_name
INTOsqlda_name
Description
DESCRIBE
retrieves metadata information about the result columns contained in a prepared statement, without actually fetching a row.
Parameters
prepared_name
The name of a prepared statement. This can be an SQL identifier or a host variable.
descriptor_name
A descriptor name. It is case sensitive. It can be an SQL identifier or a host variable.
sqlda_name
The name of an SQLDA variable.
Examples
EXEC SQL ALLOCATE DESCRIPTOR mydesc; EXEC SQL PREPARE stmt1 FROM :sql_stmt; EXEC SQL DESCRIBE stmt1 INTO SQL DESCRIPTOR mydesc; EXEC SQL GET DESCRIPTOR mydesc VALUE 1 :charvar = NAME; EXEC SQL DEALLOCATE DESCRIPTOR mydesc;
Compatibility
DESCRIBE
is specified in the SQL standard.