22.2. Criação de banco de dados #

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.

Nota

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 DATABASE nome_do_banco_de_dados OWNER nome_do_usuário;

a partir do ambiente SQL, ou

createdb -O nome_do_usuário nome_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).