You are on page 1of 5

Criando bancos de dados no PostgreSQL

Ol pessoal, no texto que segue vamos mostrar como criar um novo banco de dados no PostgreSQL
e o que acontece "por dentro" quando criamos esse banco.
S pra esclarecer, todas as referncias a nome de arquivos e pastas nesse texto referem-se verso
8.1, instalada em um ambiente Windows XP. Estou supondo que o servidor est funcionando e todas
as variveis de ambiente foram criadas corretamente.
Como a maioria dos softwares "livres", o PostgreSQL recebe contribuio de vrios
desenvolvedores ao redor do mundo. Muitas dessas contribuies so pequenos utilitrios ".exe"
que esto armazenados na pasta bin (pasta do PostgreSQL\8.1\bin). Um desses utilitrios o
createdb. Ele a primeira possibilidade que veremos para a criao de um novo banco no nosso
servidor PostgreSQL.
A primeira coisa que precisamos saber sobre esse utilitrio (e que tambm vale para a maior parte
dos outros) como acessar a ajuda. Para isso basta abrir o prompt de comando (cmd - telinha do
DOS) e executar o seguinte comando, conforme a Figura 1:

createdb help

Figura 1. Help do comando creatdb


A partir da execuo do comando acima, ser apresentada na tela (prompt) uma lista de parmetros
possveis para a execuo do comando.
O mais importante nesse momento (depois veremos os outros) o parmetro de conexo -U, que
permite o acesso ao servidor de banco de dados. O "-U" nos permite informar qual o usurio que
se "logar" no servidor para a criao do novo banco, este usurio ser o owner do banco, como no
exemplo a seguir:

createdb -U usuarioDoBanco nomeDoBancoNovo "Descrio do banco

Nota: O usurio utilizado precisa ter permisso para a criao de bancos. Dependendo de como
estiver configurado o seu arquivo hba.conf, pode ser necessrio fornecer a senha para que o
comando seja executado. Nesse caso o prompt exibir a mensagem "senha:" ou "password:".
Executado o comando recebemos a mensagem de "CREATE DATABASE" como resposta.
Quando executamos o comando acima, o que acontece na realidade que o utilitrio se conecta ao
servidor, executa o comando CREATE DATABASE e depois se desconecta.
Bom, j que isso que o utilitrio (createdb) faz, ento podemos fazer isso diretamente tambm, e
essa a segunda forma de criao do banco que veremos. Vamos criar um novo banco, agora
utilizando o cliente psql.
Para nos "logarmos" no psql (aplicativo cliente para o servidor PostgreSQL - disponvel na pasta
"bin") executamos o comando:

psql -U usuarioDoBanco nomeDeUmBanco

Por exemplo:
psql -U postgres template1

A nota acima relacionada senha e o help tambm valem para o psql. A ajuda dos comandos do
psql pode ser obtida, aps logado, atravs do comando \?.
Aps logado no psql executamos o comando: \h create database - para obtermos a ajuda sobre o
CREATE DATABASE. Os parmetros entre "[]" so opcionais. E o texto aps "--" so os meus
comentrios, como mostra a Figura 2.
Figura 2. Criando o banco

CREATE DATABASE nome -- nome do banco de dados a ser criado.


[ [ WITH ] [ OWNER [=] dono_bd ] -- usurio do servidor que ser o owner (dono) do banco, caso seja omitido
ser o usurio conectado.
[ TEMPLATE [=] modelo ] -- banco de dados que ser usado como modelo para a criao do novo banco
[ ENCODING [=] codificao ] -- tipo de codificao dos dados que sero armazenados no banco
[ TABLESPACE [=] tablespace ] ] -- tablespace onde o banco ser criado fisicamente
[ CONNECTION LIMIT [=] limite_con ] ]; -- nmero mximo de conexes simultneas permitidas no banco

O ";" o finalizador de comandos dentro do psql.


Note que os parmetros que aparecem no comando createdb, com exceo dos de conexo, esto
todos presentes no comando CREATE DATABASE.
A exemplo da execuo do createdb, Ao executar o comando receberemos a mensagem de
"CREATE DATABASE" como resposta.
Como as coisas funcionam por dentro: a criao de um banco de dados no PostgreSQL um pouco
diferente dos outros SGBDs conhecidos. Quando criamos um novo banco o que estamos fazendo na
realidade uma cpia da estrutura de um outro banco. Isso pode ser verificado na tag template no
comando acima. Na instalao do PostgreSQL ele traz dois bancos templates, template0 que o
banco "vazio", ou seja, com a estrutura mais bsica e o template1 que traz consigo todas as opes
que foram escolhidas no momento da instalao do PostgreSQL. Essa uma funcionalidade
bastante interessante quando temos bases de dados similares. Por exemplo, imagine uma empresa
de hospedagem, onde todos os seus clientes devem possuir uma tabela de log e algumas funes j
predefinidas. Basta que seja criado (ou utilizado o template1) um banco com essa tabela e funes e
que os outros bancos a serem criados tenham "template = bancoComTabelaLog", dessa forma todo
banco j "nasce" tendo a estrutura da tabela log e as funes que sero comuns a todos os bancos.
Aps criado o banco no PostgreSQL inserida uma nova linha na tabela do sistema pg_database
com o datname = "seuBanco" e um oid associado a ele. Veja:
select datname, oid from pg_database;

Esse oid o nmero de identificao do novo banco, como mostra a Figura 3.

Figura 3. Numero de identificao

Os arquivos fsicos do seu novo banco estaro armazenados em uma pasta identificada por esse
numero (oid) dentro da pasta PostgreSQL\base (se voc no alterou o tablespace default). Observe a
Figura 4.

Figura 4. Arquivos fsicos

Uma outra forma para a criao de um banco no PostgreSQL utilizar a interface grfica pgAdmin.
Nesse caso, basta clicar no cone de databases com o boto direito do mouse e selecionar a opo
"new database" ou "novo banco de dados". Depois disso basta escolher ou preencher os campos do
form e pronto.
A ideia principal desse artigo mostrar como as coisas funcionam internamente na criao de um
banco no PostgreSQL.