Translate

quinta-feira, 23 de janeiro de 2014

PostgreSql - Criar um banco de dados parte I

Vamos apresentar alguns exemplos da criação de um banco de dados no postgresql.
Podemos criar um banco das seguintes formas:
Criar um banco através da linha de comando via sql

Antes de criar o banco vamos fazer a conexão com o servidor:

psql -h <nome ou ip do host> -U <nome do usuário>  -d <nome do banco dados>

Exemplo

psql -h 127.0.0.1 -U  postgres -d postgres

OU

psql -h 127.0.0.1 -U  postgres

Parâmetros

-h: como estou executando localmente na minha máquina utilizei o ip 127.0.0.1.
Também poderia ter passado o nome localhost;

-U: nome do usuário, no meu caso postgres.
Para você criar um banco você deve ser um super usuário ou ser um usuário com o privilégio de "CREATEDB".
O usuário postgres é um super usuário. No final do artigo, mostramos como listar os privilégios dos usuários

-d: nome do banco que será conectado
Neste exemplo, nos conectamos ao banco de dados "postgres". Este banco é padrão do postgresql, pois já foi criado na instalação.
Quando o nome de usuário é igual ao do banco, como neste caso, não é necessário passar o parâmetro "-d" com o nome do banco, pois quando omitimos o nome do banco, o psql considera que é o nome do banco é igual ao nome do usuário;


Após ter se conectado com o servidor, você pode criar o banco executando a sentença sql conforme o exemplo a seguir:

SINTAXE

CREATE DATABASE nome_do_banco;

Exemplo

Vamos criar um banco de chamado db_livraria

CREATE DATABASE db_livraria;

Veja a imagem abaixo da criação do banco de dados db_livraria:


Agora que já criamos o banco, como vamos acessá-lo?

Para acessarmos um banco utilizamos o comando psql "\c".

\c <nome do banco>

No caso de "db_livraria", ficará ;
\c db_livraria



Agora vamos listar todos os bancos do postgresql para verificar com quais parâmetros eles são criados, utilize o comando psql "\l", conforme exibido na imagem abaixo:



Ao observar o banco db_livraria, percebemos que alguns parâmetros foram incluídos por padrão como o proprietário do banco, a codificação "UTF-8" entre outros.
Estas configurações foram baseadas no banco de dados "template1". O template1 é um modelo para a criação de outros bancos de dados. Ele é criado na instalação do postgresql.   Em outros artigos, falaremos mais sobre o template1. 
Porém caso tenhamos necessidade, podemos passar os parâmetros na criação de um banco. Aqui descrevemos dois deles:  "OWNER" e "CONNECTION LIMIT". Para consultar todos os parâmetros, verifique o manual do postgresql.

CREATE DATABASE nome_do_banco
WITH 
OWNER                        =  <Nome do usuário proprietário do banco>
CONNECTION LIMIT =  <número máximo de conexões do banco.>


PARÂMETRO OWNER

Após o parâmetro OWNER colocamos o nome do usuário que será proprietário do novo banco, caso você não utilize este parâmetro, o usuário que está executando o comando será o proprietário do banco. 

Exemplo do parâmetro OWNER

Vamos criar um banco chamado db_financeiro. A proprietária deste banco será a Ana.
O nome de usuário da Ana vai ser: ana.

Solução

Antes de criarmos o banco, vamos criar a usuária ana, caso ela não exista.

CREATE ROLE ana LOGIN PASSWORD 'cs486338#';

Após executarmos a sentença acima, criamos a usuária ana. Agora vamos criar o banco db_financeiro. 

CREATE DATABASE db_financeiro
WITH 
OWNER = ana;

Observações

Após o WITH passamos os parâmetros que queremos utilizar no banco. Porém o uso do  WITH é opcional, ou seja também é possível passar os parâmetros sem utilizá-lo na sentença:
O sinal de '=' também é opcional.
A sentença também pode ser escrita desta forma.

CREATE DATABASE db_financeiro OWNER  ana;

Para acessarmos o banco "db_financeiro" utilize o comando psql:


\c db_financeiro

PARÂMETRO CONNECTION LIMIT

CONNECTION LIMIT: número conexões podem ser feitas simultaneamente (ao mesmo tempo) em um banco. Caso você não passe este parâmetro não haverá limite de conexões, ou seja por padrão o valor deste parâmetro será -1.

Exemplo do parâmetro CONNECTION LIMIT

Criar um banco chamado db_escola. Serão permitidos, no máximo, duas conexões e a proprietária será a ana.

CREATE DATABASE db_escola
WITH 
CONNECTION LIMIT = 2
OWNER = ana;

Após a criação do banco, vamos sair da conexão com o usuário postgres, para isso vamos utilizar o comando psql "\q".




Agora vamos nos conectar com a usuária ana.
Quando a usuária ana tentar fazer a terceira conexão,  haverá um erro devido ao limite de 2 conexões. Veja a imagem abaixo. 




Observações

Caso você queira aumentar o limite de conexões do banco "db_escola" para 10 execute a sentença abaixo, na 1ª ou na 2ª conexão:

ALTER DATABASE db_escola CONNECTION LIMIT 10;

Importante: se você precisar limitar o número de conexões no servidor postgresql e não em um banco em específico, você deve alterar a diretiva "max_connections" no arquivo "postgresql.conf" e reiniciar o serviço, mas isso é assunto para um próximo post. 

Verificar os privilégios de usuários

Como prometemos no início do artigo, vamos mostrar como verificar os privilégio de usuário. Para isso, vamos utilizar o comando psql "\du".
O resultado da execução deste comando é exibido na imagem a seguir:


Como podemos ver na imagem acima, os usuários carlos, caio e postgres terão privilégio 
para criar banco de dados, pois os dois primeiros tem a permissão de CREATEDB e o 
último tem a permissão de super-usuário.
A ana não terá permissão para criar novos bancos de dados.

Veja também:


Faça um comentário no final do artigo, suas sugestões ou críticas serão bem-vindas.

Um comentário:

  1. Obrigado pelo tutorial
    eu estou fazendo um controle do postgres pelo vba excel
    de inicio eu sofri para fazer o vba se conectar ao postgres, mas apos conseguir a conexão o seu tutorial me ajudou bastante a complementar meu código

    Eduardo

    ResponderExcluir