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 referências a nome de arquivos e pastas nesse texto referem-se à versão 8.1, instalada em um ambiente Windows XP. Estou supondo que o servidor está funcionando e todas as variáveis de ambiente foram criadas corretamente.

Como a maioria dos softwares "livres", o PostgreSQL recebe contribuição de vários desenvolvedores ao redor do mundo. Muitas dessas contribuições são pequenos utilitários ".exe" que estão armazenados na pasta bin (pasta do PostgreSQL\8.1\bin). Um desses utilitários é o createdb. Ele é a primeira possibilidade que veremos para a criação de um novo banco no nosso servidor PostgreSQL.

A primeira coisa que precisamos saber sobre esse utilitário (e que também 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

29-08-2007pic01.JPG

Figura 1. Help do comando creatdb

A partir da execução do comando acima, será apresentada na tela (prompt) uma lista de parâmetros possíveis para a execução do comando.

O mais importante nesse momento (depois veremos os outros) é o parâmetro de conexão -U, que permite o acesso ao servidor de banco de dados. O "-U" nos permite informar qual é o usuário que se "logará" no servidor para a criação do novo banco, este usuário será o owner do banco, como no exemplo a seguir:

createdb -U usuarioDoBanco nomeDoBancoNovo "Descrição do banco

Nota: O usuário utilizado precisa ter permissão para a criação de bancos. Dependendo de como estiver configurado o seu arquivo hba.conf, pode ser necessário 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 utilitário se conecta ao servidor, executa o comando CREATE DATABASE e depois se desconecta.

Bom, já que é isso que o utilitário (createdb) faz, então podemos fazer isso diretamente também, e essa é a segunda forma de criação 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 - disponível na pasta "bin") executamos o comando:

psql -U usuarioDoBanco nomeDeUmBanco

Por exemplo:

psql -U postgres template1

A nota acima relacionada à senha e o –help também valem para o psql. A ajuda dos comandos do psql pode ser obtida, após logado, através do comando “\?”.

Após logado no psql executamos o comando: \h create database - para obtermos a ajuda sobre o CREATE DATABASE. Os parâmetros entre "[]" são opcionais. E o texto após "--" são os meus comentários, como mostra a Figura 2.

29-08-2007pic02.JPG
Figura 2. Criando o banco

CREATE DATABASE nome -- nome do banco de dados a ser criado.
     [ [ WITH ] [ OWNER [=] dono_bd ]  -- usuário do servidor que será o owner (dono) do banco, caso seja omitido será o usuário conectado.
            [ TEMPLATE [=] modelo ] -- banco de dados que será usado como modelo para a criação do novo banco
            [ ENCODING [=] codificação ] -- tipo de codificação dos dados que serão armazenados no banco
            [ TABLESPACE [=] tablespace ] ] -- tablespace onde o banco será criado fisicamente
            [ CONNECTION LIMIT [=] limite_con ] ]; -- número máximo de conexões simultâneas permitidas no banco

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

Note que os parâmetros que aparecem no comando createdb, com exceção dos de conexão, estão todos presentes no comando CREATE DATABASE.

A exemplo da execução do createdb, Ao executar o comando receberemos a mensagem de "CREATE DATABASE" como resposta.

Como as coisas funcionam por dentro: a criação 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 cópia da estrutura de um outro banco. Isso pode ser verificado na tag template no comando acima. Na instalação do PostgreSQL ele traz dois bancos templates, template0 que é o banco "vazio", ou seja, com a estrutura mais básica e o template1 que traz consigo todas as opções que foram escolhidas no momento da instalação 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 funções já predefinidas. Basta que seja criado (ou utilizado o template1) um banco com essa tabela e funções 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 funções que serão comuns a todos os bancos.

Após 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 número de identificação do novo banco, como mostra a Figura 3.

29-08-2007pic03.JPG

Figura 3. Numero de identificação

Os arquivos físicos do seu novo banco estarão armazenados em uma pasta identificada por esse numero (oid) dentro da pasta PostgreSQL\base (se você não alterou o tablespace default). Observe a Figura 4.

29-08-2007pic04.JPG

Figura 4. Arquivos físicos

Uma outra forma para a criação de um banco no PostgreSQL é utilizar a interface gráfica pgAdmin. Nesse caso, basta clicar no ícone de databases com o botão direito do mouse e selecionar a opção "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 criação de um banco no PostgreSQL.

Grande abraço e até a próxima, se Deus quiser.