Самоучитель по SQL-сервер в Linux



CREATE DATABASE

Создание новой базы данных в PostgreSQL.

Синтаксис

CREATE DATABASE база_данных

[ WITH [ LOCATION = { 'каталог' | DEFAULT } ]

[ TEMPLATE = шаблон DEFAULT ]

[ ENCODING = имя_нодировки | номер_кодировки | DEFAULT ] ]

Параметры

  • база_данных. Имя создаваемой базы данных.
  • каталог. Каталог, в котором хранится база данных. С ключевым словом DEFAULT база сохраняется в каталоге по умолчанию, задаваемом переменной среды PGDATA (или ключом -D, переданным postmaster).

ВНИМАНИЕ

В параметре каталог обычно передается имя системной переменной среды, значение которой описывает инициализированный каталог базы данных. Тем не менее, если при компиляции PostgreSQL использовалась команда gmake с ключом CPPFLAGS=-DALLOW_ABSOLUTE_DBPATHS, можно ввести полный, абсолютный путь.

  • шаблон. Имя шаблона, на основании которого создается новая база данных. Ключевое слово DEFAULT означает шаблон по умолчанию (обычно templatel).
  • имя_кодировки | номер_кодировки. Расширенная кодировка, используемая базой данных. Задается в виде строкового литерала или в виде целочисленного номера, определяющего тип кодировки. Список типов расширенных кодировок в PostgreSQL приведен в приложении А.
  • DEFAULT. Ключевое слово DEFAULT явно задает кодировку по умолчанию (используемую при отсутствии параметра ENCODING).

Результаты

  • CREATE DATABASE. Сообщение выдается при успешном создании новой базы данных.
  • ERROR: user "пользователь" is not allowed to create/drop database. Ошибка — пользователь PostgreSQL не обладает привилегией createdb, необходимой для создания базы данных. Администратор PostgreSQL предоставляет право создания баз данных пользователям при помощи команды ALTER USER.
  • ERROR: Absolute paths are not allowed as database locations. Ошибка —в параметре LOCATION был указан абсолютный путь, а при компиляции PostgreSQL команда gmake вызывалась без ключа CPPFLAGS=-DALLOW_ABSOLUTE_DBPATHS.
  • ERROR: Relative paths are not allowed as database locations. Ошибка — в параметре LOCATION указан относительный путь, а в PostgreSQL 7.1.x данная возможность не поддерживается. В этом параметре необходимо передать имя переменной среды, содержащей информацию о требуемом местонахождении базы данных.
  • ERROR: createdb: database "база_данных" already exists. Ошибка — база данных с указанным именем уже существует в системном каталоге.
  • ERROR: database path may not contain single quotes. Ошибка —в параметре каталог (местонахождение базы данных в файловой системе) используются апострофы ('), несовместимые с системной программой создания каталогов.
  • ERROR: CREATE DATABASE: unable to create database directory '/каталог'. Ошибка — сохранение базы данных в заданном каталоге невозможно. Причины могут быть разными: переполнение диска, отсутствие прав доступа к заданному каталогу, отсутствие предварительной инициализации командами initdb или initlocation. Заданный каталог должен быть доступен для пользователя, под именем которого работает процесс postmaster.
  • ERROR: CREATE DATABASE: May not be called in a transaction block. Ошибка-попытка вызова CREATE DATABASE в транзакционном блоке. Команда CREATE DATABASE не может использоваться в открытых блоках транзакций.

Описание

Команда CREATE DATABASE создает в системе новую базу данных. Пользователь PostgreSQL, под именем которого вы зарегистрированы, автоматически становится владельцем новой базы данных, поэтому перед вызовом команды следует убедиться в том, что вы работаете под правильным именем.

ПРИМЕЧАНИЕ

При крайней необходимости владельца базы данных можно изменить, для чего с полем datdba системной таблицы pg_database выполняется команда UPDATE с системным идентификатором другого пользователя PostgreSQL.

Параметр LOCATION обычно описывает переменную среды, содержащую путь к каталогу, в котором создается новая база данных. Переменная должна существовать в рабочей среде пользователя, запустившего процесс postmaster. Таким образом администраторы могут лучше управлять тем, в каких каталогах создаются новые базы данных. За дополнительной информацией по этой теме обращайтесь к главе 9.

Каталог, выбранный для хранения базы данных, должен быть предварительно инициализирован командой initlocation (или initdb). Команды описаны в главе 9.

ПРИМЕЧАНИЕ

Если при компиляции PostgreSQL был установлен ключ ALLOW_ABSOLUTE_PATH (посредством передачи ключа CPPFLAGS=-DALLOW_ABSOLL)TE_PATH утилите groake после конфигурации), при создании базы данных можно указывать абсолютные пути. По умолчанию этот режим запрещен, что связано с проблемами безопасности и целостности данных, возникающими при создании баз данных в произвольных каталогах.

При создании новой базы данных PostgreSQL создает дубликат указанного шаблона (по умолчанию— tempiatel). Чтобы использовать а качестве шаблона другую базу данных, укажите ее имя в секции TEMPLATE. Чтобы создать пустую базу данных, не содержащую копию объектов шаблона, выберите шаблон template0.

Примеры

Следующая команда создает базу данных с именем booktown:

tempiatel=# CREATE DATABASE booktown;

CREATE DATABASE

В следующем фрагменте та же база данных создается в другом каталоге:

tempiatelHf CREATE DATABASE booktown WITH LOCATION = '/usr/local/pgsql/booktown';

CREATE DATABASE