Para criar um banco de dados, o servidor PostgreSQL deve estar ativo (veja Ativação do servidor de banco de dados).
Os bancos de dados são criados com o comando CREATE DATABASE do SQL
CREATE DATABASE nome_do_banco_de_dados;
onde nome_do_banco_de_dados segue as
regras usuais do SQL para identificadores.
A função de banco de dados (role)
corrente torna-se automaticamente a dona do novo banco de dados.
É privilégio do dono do banco de dados removê-lo posteriormente
(o que também remove todos os objetos contidos nele, mesmo tendo
um dono diferente).
A criação de bancos de dados é uma operação restrita. Veja Atributos de função de banco de dados para saber como conceder permissão.
Uma vez que é necessário estar conectado ao servidor de banco de dados
para executar o comando CREATE DATABASE,
fica a questão de como pode ser criado o primeiro
banco de dados em qualquer instância.
O primeiro banco de dados é sempre criado pelo utilitário
initdb quando a instância é inicializada.
(veja Criação do agrupamento de bancos de dados.)
Este banco de dados se chama postgres.
Portanto, para criar o primeiro banco de dados “comum”,
pode-se conectar ao banco de dados postgres.
Também são criados dois bancos de dados adicionais,
template1
e
template0,
durante a inicialização da instância de banco de dados.
Sempre que um novo banco de dados é criado na instância, o banco de
dados template1 é essencialmente clonado.
Isto significa que quaisquer alterações feitas no banco de dados
template1 são propagadas para todos os bancos de
dados criados posteriormente.
Por isto, deve-se evitar criar objetos no template1,
a menos que queira que sejam propagados para todos os bancos de dados
recém-criados.
O bancos de dados template0 destina-se a ser uma
cópia fiel do conteúdo original de template1.
Ele pode ser clonado em vez de template1 quando
for importante criar um banco de dados sem quaisquer dessas adições
locais da instalação.
Podem ser vistos mais detalhes em
Bancos de dados modelo.
Como conveniência, existe um programa que se pode executar a partir do interpretador de comandos (shell) para criar novos bancos de dados, chamado Criação de banco de dados:
createdb nome_do_banco_de_dados
O utilitário createdb não faz nenhuma mágica.
Ele se conecta ao banco de dados postgres e
executa o comando CREATE DATABASE, como
descrito acima.
A página de referência do utilitário createdb
contém os detalhes da chamada.
Note-se que a execução do utilitário createdb sem
nenhum argumento irá criar um banco de dados com o nome do usuário
corrente.
Autenticação de cliente contém informações sobre como restringir quem pode se conectar a um determinado banco de dados.
Às vezes se deseja criar um banco de dados para outra pessoa, e torná-la a dona do novo banco de dados, para que esta pessoa possa configurá-lo e gerenciá-lo por conta própria. Para fazer isto, deve-se usar o comando
CREATE DATABASEnome_do_banco_de_dadosOWNERnome_do_usuário;
a partir do ambiente SQL, ou
createdb -Onome_do_usuárionome_do_banco_de_dados
a partir do interpretador de comandos. Somente os superusuários têm permissão para criar um banco de dados para outra pessoa (ou seja, para uma função de banco de dados (role) da qual não é membro).