CREATE DATABASE

Name

CREATE DATABASE  --  cria um banco de dados novo

Synopsis

CREATE DATABASE nome
    [ WITH [ LOCATION = 'caminho' ]
           [ TEMPLATE = gabarito ]
           [ ENCODING = codificação ] ]
  

Entradas

nome

O nome do banco de dados a ser criado.

caminho

Um local alternativo no sistema de arquivos onde será armazenado o banco de dados, especificado como uma cadeia de caracteres; ou DEFAULT para utilizar o local padrão.

gabarito

Nome do banco de dados a ser usado como gabarito para a criação do novo banco de dados, ou DEFAULT para utilizar o banco de dados de gabarito padrão (template1).

codificação

Método de codificação multibyte a ser utilizado no novo banco de dados. Especifique o nome como uma cadeia de caracteres (por exemplo, 'SQL_ASCII'), ou o número inteiro da codificação, ou DEFAULT para utilizar a codificação padrão.

Saídas

CREATE DATABASE

Mensagem retornada se o comando for executado com sucesso.

ERROR: user 'nome_do_usuário' is not allowed to create/drop databases

É necessário possuir o privilégio especial CREATEDB para criar bancos de dados. Consulte o comando CREATE USER.

ERROR: createdb: database "nome" already exists

Esta mensagem ocorre se o banco de dados com o nome especificado já existir.

ERROR: database path may not contain single quotes

O local do banco de dados especificado em caminho não pode conter apóstrofos ('). Isto é necessário para que o interpretador de comandos, que vai criar o diretório do banco de dados, possa executar com segurança.

ERROR: CREATE DATABASE: may not be called in a transaction block

Havendo um bloco de transação explícito sendo executado não é possível utilizar o comando CREATE DATABASE. Primeiro a transação deve terminar.

ERROR: Unable to create database directory 'caminho'.
ERROR: Could not initialize database directory.

Estas mensagens estão relacionadas com a falta de permissão no diretório de dados, o disco estar cheio, ou outro problema no sistema de arquivos. O usuário, sob o qual o servidor de banco de dados está processando, deve ter permissão para o local.

Descrição

O comando CREATE DATABASE cria um banco de dados novo no PostgreSQL. O criador se torna o dono do novo banco de dados.

Um local alternativo pode ser especificado com a finalidade de, por exemplo, armazenar o banco de dados em um disco diferente. O caminho deve ter sido preparado anteriormente com o comando initlocation.

Se o nome do caminho não possuir uma barra (/) é interpretado como sendo o nome de uma variável de ambiente, a qual deve ser conhecida pelo servidor. Desta maneira, o administrador do banco de dados pode exercer controle sobre os locais onde os bancos de dados podem ser criados (Uma escolha usual é, por exemplo, PGDATA2). Se o servidor for compilado com ALLOW_ABSOLUTE_DBPATHS (o que não é feito por padrão), nomes de caminhos absolutos, identificados por uma barra inicial (por exemplo, /usr/local/pgsql/data), também são permitidos.

Por padrão, o novo banco de dados será criado clonando o banco de dados padrão do sistema template1. Um gabarito diferente pode ser especificado escrevendo-se TEMPLATE = nome. Em particular, escrevendo-se TEMPLATE = template0, pode ser criado um banco de dados básico contendo apenas os objetos padrão predefinidos pela versão do PostgreSQL sendo utilizada. Esta forma é útil quando se deseja evitar a cópia de qualquer objeto da instalação local que possa ter sido adicionado ao template1.

O parâmetro opcional de codificação permite a escolha de uma codificação para o banco de dados, se o servidor em uso foi compilado com suporte à codificação multibyte. Quando este parâmetro não é especificado, o padrão é utilizar a mesma codificação do banco de dados usado como gabarito.

Os parâmetros opcionais podem ser escritos em qualquer ordem, e não apenas na ordem mostrada acima.

Notas

O comando CREATE DATABASE é uma extensão da linguagem do PostgreSQL.

Use o comando DROP DATABASE para excluir um banco de dados.

O aplicativo createdb é um script envoltório criado em torno deste comando, fornecido por conveniência.

Existem questões associadas à segurança e à integridade dos dados envolvidas na utilização de locais alternativos para os bancos de dados especificados por caminhos absolutos. Por isso, pelo padrão, somente uma variável de ambiente conhecida pelo gerenciador de banco de dados pode ser especificada para um local alternativo. Consulte o Guia do Administrador do PostgreSQL para obter mais informações.

Embora seja possível copiar outros bancos de dados além do template1 especificando-se seu nome como gabarito, não se pretende (pelo menos ainda) que seja uma funcionalidade para COPY DATABASE de uso geral. É recomendado que os bancos de dados utilizados como gabarito sejam tratados como se fossem apenas de leitura. Consulte o Guia do Administrador do PostgreSQL para obter mais informações.

Utilização

Para criar um banco de dados novo:

silva=> create database lusiadas;
   

Para criar um banco de dados novo na área alternativa ~/bd_privado:

$ mkdir bd_privado
$ initlocation ~/bd_privado
    The location will be initialized with username "silva".
This user will own all the files and must also own the server process.
Creating directory /home/silva/bd_privado
Creating directory /home/silva/bd_privado/base

initlocation is complete.
    
   
$ psql silva
Welcome to psql, the PostgreSQL interactive terminal.
 
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

silva=> CREATE DATABASE outrolugar WITH LOCATION = '/home/silva/bd_privado';
CREATE DATABASE
   

Compatibilidade

SQL92

Não existe o comando CREATE DATABASE no SQL92. Os bancos de dados são equivalentes aos catálogos cuja criação é definida pela implementação.