Você está na página 1de 53

caractersticas gerais de um SGBD open source

Grupo:
Thiago de A. Lima
Daniel Fonseca
Wlysses Chaves

PostGreSQL

PostgreSQL um sistema gerenciador de banco de dados objeto relacional (SGBDOR),


desenvolvido como projeto de cdigo aberto.

OPEN SOURCE
Foi criado pela OSI (Open Source Initiative) e refere-se a
software tambm conhecido por software livre.
Genericamente trata-se de software que respeita as
quatro liberdades definidas pela Free Software
Foundation.

1 liberdade: A liberdade de executar o software, para qualquer uso.


2 liberdade: A liberdade de estudar o funcionamento de um programa e de
adapt-lo s suas necessidades.
3 liberdade: A liberdade de redistribuir cpias.
4 liberdade: A liberdade de melhorar o programa e de tornar as modificaes
pblicas de modo que a comunidade inteira beneficie da melhoria.

A realizao de tais aes reservada, pelo conceito de direito de


autor, aos detentores dos direitos, que necessitam assim de permitir de forma
explcita estas liberdades recorrendo a uma licena de software livre.

LICENAS OPEN SOURCES


Algumas licenas:
General Public License (Licena Pblica Geral): A GPL a licena com maior
utilizao por parte de projetos de software livre, em grande parte devido sua
adoo para o projeto GNU e o sistema operacional GNU/Linux.
Licena Apache uma licena para software livre (open source) de autoria da
Apache Software Foundation (ASF). Todo software produzido pela ASF ou qualquer
um dos seus projetos e sub-projetos licenciado de acordo com os termos da
licena Apache.
BSD permite que o software distribudo sob a licena, seja incorporado a produtos
proprietrios. Trabalhos baseados no material podem at ser liberados com licena
proprietria. Alguns exemplos notveis so: o uso de cdigo do BSD (funes de
rede de computadores) em produtos da Microsoft, e o uso de muitos componentes
do FreeBSD no sistema Mac OS X da Apple Computer.

COMPARANDO LICENAS

GPL
BSD
Express

Informix

- Limitao ao tamanho dos dados (mximo 4Gb)


- Limitao ao tamanho de memria (mximo 1Gb)

-No Maximo um Processador e 2 GB de


memria.

UM POUCO DA HISTORIA DO POSTGRE


O PostgreSQL um dos resultados de uma
ampla evoluo que se iniciou com o projeto Ingres,
desenvolvido na Universidade de Berkeley, Califrnia.
O lder do projeto, Michael Stonebraker, um dos pioneiros dos bancos de dados
relacionais, deixou a universidade em 1982 para comercializar o Ingres, porm retornou a
ela logo em seguida.
Aps seu retorno a Berkeley, em 1985, Stonebraker comeou um projeto psIngres patrocinado pela DARPA (*Defense Advanced Research Projects Agency) e pelo
ARO (Army Research Office) com o objetivo de resolver problemas com o modelo
de banco de dados relacional.

*Agncia de Pesquisas em Projetos Avanados

UM POUCO DA HISTORIA DO POSTGRE

O principal problema era a incapacidade do modelo relacional compreender


tipos (atualmente, chamados de objetos), ou seja, combinaes de dados simples que
formam uma nica unidade.

O projeto resultante, chamado Postgres, era orientado a introduzir a menor


quantidade possvel de funcionalidades para completar o suporte a tipos.
Estas funcionalidades incluam a habilidade de definir tipos, mas tambm a
habilidade de descrever relaes - as quais at este momento eram amplamente
utilizadas, mas completamente mantidas pelo usurio. No Postgres, o banco de dados
"compreendia" as relaes e podia obter informaes de tabelas relacionadas
utilizando regras.

UM POUCO DA HISTORIA DO POSTGRE

Em agosto de 1996, Marc Fournier, Bruce Momjian e Vadim B. Mikheev


lanaram a primeira verso externa da Universidade de Berkeley e deram incio tarefa
de estabilizar o cdigo herdado. Tambm em 1996, o projeto foi renomeado para
PostgreSQL a fim de refletir a nova linguagem de consulta ao banco de dados: SQL. A
primeira verso de PostgreSQL, a 6.0, foi liberada em janeiro de 1997. Desde ento, um
grupo de desenvolvedores e de voluntrios de todo o mundo, coordenados pela
Internet, tm mantido o software e desenvolvido novas funcionalidades.
As principais caractersticas acrescentadas nas verses 6.x so MVCC
(Multiversion Concurrency Control Controle de Concorrncia Multiverses), melhorias
no SQL e novos tipos de dados nativos (novos tipos de datas e hora e tipos
geomtricos).

UM POUCO DA HISTORIA DO POSTGRE


Em maio de 2000 foi liberada a verso 7.0. As verses 7.x trouxeram as
seguintes novas funcionalidades: Write-Ahead Log (WAL), esquemas SQL, outer joins,
suporte a IPv6, indexao por texto, suporte melhorado a SSL e informaes
estatsticas do banco de dados.
A verso 8.0 foi lanada em janeiro de 2005 e entre outras novidades, foi a primeira a
ter suporte nativo para Microsoft Windows (tradicionalmente, o PostgreSQL s rodava
de forma nativa em sistemas Unix e, em sistemas Windows - atravs da biblioteca
Cygwin). Dentre as muitas novidades da verso 8.x, pode-se destacar o suporte a
tablespaces, savepoints, point-in-time recovery, roles e Two-Phase Commit (2PC). Em
julho de 2009 foi lanada a verso mais recente: 8.4.

Em um sistema usando WAL, todas as modificaes so gravadas em um log antes de serem


aplicadas.
Uma das principais vantagens da utilizao do WAL um nmero reduzido de forma
significativa de gravaes em disco, pois somente o arquivo de log deve ser liberado para o
disco no momento da confirmao da transao, ao invs de cada arquivo de dados alterados
pela transao. Em ambientes de multiusurios, efetivao de vrias transaes podem ser
realizadas com um nico fsync do arquivo de log

UM POUCO DA HISTORIA DO POSTGRE


O PostgreSQL 9.0 inclui ainda dezenas de outras grandes melhorias que
aprimoram todos os aspectos do projeto e da performance de aplicaes de
bancos de dados, incluindo: suporte a windows 64 bits, gatilhos condicionais e
por coluna, atualizao in loco da 8.3 e 8.4, restries de unicidade
postergveis, e mensagens assncronas de alto desempenho

Administrao e Segurana
Atualizao in Loco (Upgrade-in-Place) Integrada (pg_upgrade)
Autenticao RADIUS
Verificao de Fora de Senha (passwordcheck)
Comandos de Gesto de Permisses de Banco de Dados Facilitados (GRANT ON ALL e DEFAULT
PERMISSIONS)

Performance e Recursos Avanados


Mensagens Assncronas Melhoradas (LISTEN/NOTIFY)
Suporte a Windows 64-bit
Otimizao para Consultas Geradas por ORM (remoo de JOIN)
Chaves nicas para Dados no Escalares (Exclusion Constraints)
Suporte Expantido para Dados Chave-Valor (HStore)
Planos de Explain em JSON e XML

COMO PARTICIPAR ?

O PostgreSQL um projeto open source coordenado pelo PostgreSQL Global


Development Group. Embora as atividades do grupo sejam patrocinadas por
diversas organizaes de todo o mundo, seu modelo de desenvolvimento o
modelo Bazar (originalmente apresentado em A Catedral e o Bazar de Eric S.
Raymond).
Portanto, o desenvolvimento do PostgreSQL feito por um grupo de
desenvolvedores, em sua maioria voluntrios, espalhados por todo o mundo e que
se comunicam via Internet. Logo, trata-se, de um projeto direcionado pela
comunidade de desenvolvedores e de usurios, a qual qualquer pessoa pode se
juntar, bastando se inscrever em listas de discusso e participar delas.

COMO PARTICIPAR ?
Voluntrios interessados em contribuir com o projeto tambm podem consultar as
sugestes de tarefas de desenvolvimento de novas funes e de correes de
erros que so publicadas ou apresentar suas prprias sugestes. O cdigo
desenvolvido submetido equipe do projeto que pode aceit-lo e inclu-lo nas
novas verses ou recus-lo. Voluntrios tambm podem colaborar gerando
documentao ou realizando tradues!

LICENA
O PostgreSQL usa a licena BSD, que requer apenas que o cdigo fonte
licenciado mantenha seu direito de cpia e informao da licena. Esta licena
certificada pela OSI amplamente vista como flexvel e amigvel empresas, j
que ela no restringe o uso do PostgreSQL com aplicaes comerciais e
proprietrias. Juntamente com suporte de mltiplas empresas e propriedade
pblica do cdigo, a licena BSD torna o PostgreSQL muito popular com
fabricantes que querem anexar um banco de dados com seus prprios produtos
sem medo de nus financeiro, priso um s fabricante, ou mudanas nos termos
de licenas.

LINGUAGEM
A principal linguagem de programao utilizada no desenvolvimento do
PostgreSQL 8.3.0 o ANSI C. Entretanto, tambm so utilizadas minoritariamente
outras linguagens conforme mostra a tabela.
Linguagens de Programao utilizadas no PostgreSQL 8.3.0
Linguagem

Linhas de cdigo

ANSI C

541.312

94,66

yacc

15.527

2,72

lex

5.580

0,98

sh

5.412

0,95

perl

3.913

0,68

asm

65

0,01

python

12

0,00

LIMITES DO POSTGRES

Tamanho Mximo do Banco de Dados


Tamanho mximo de uma Tabela
Tamanho Mximo de uma Linha
Tamanho Mximo de um Campo
Mximo de Linhas por Tabela
Mximo de Colunas por Tabela
Mximo de ndices por Tabela

Ilimitado
32 TB
1.6 TB
1 GB
Ilimitado
2501600 dependendo do tipo de coluna

Ilimitado

ESTADO ATUAL
Alm de doaes, o projeto PostgreSQL se sustenta pelo patrocnio de diversas
empresas, entre as quais se destacam: Fujitsu, Hub.Org, NTT Group, Red Hat,
Skype, SRA e Sun Microsystems.
O software tem adquirido prestgio na comunidade Linux, tendo recebido diversas
vezes o prmio Linux Journal Editor's Choice de melhor sistema de gerenciamento
de banco de dados (SGBD).

A aceitao do PostgreSQL tem se ampliado para alm da comunidade de cdigo


aberto. H entre os seus usurios grandes empresas internacionais, rgos
governamentais de vrios pases e universidades de prestgio mundial. Existe uma
lista dos principais usurios no Brasil e no mundo e, tambm, h alguns estudos
de caso de aplicaes que utilizam o PostgreSQL.

QUEM USA POSTGRE ?

U.S. State Department

CASOS DE SUCESSO

O Detran do Cear economizou R$ 1,7 milho com banco de dados livre.


A deciso do governo cearense de substituir a soluo de banco de dados da
Oracle pelo PostgreSQL fez com que o Detran economizasse gastos com
pagamento de licenas e servio de suporte tcnico.
O Detran tinha a seguinte arquitetura: um servidor de aplicao ligado a um
servidor Oracle. Era nesta situao que as 1.287 tabelas e 426 views do
banco se encontravam. Gastava-se muito dinheiro com o pagamento de
licenas e o governador queria que o Detran utilizasse o Software Livre.
Pensou-se em utilizar o MySQL, mas optou-se pelo PostgreSQL, que j era o
banco de dados oficial do Governo do Cear.

CASOS DE SUCESSO
Quais foram as principais dificuldades encontradas?
A principal dificuldade era que a equipe estava ocupada com as tarefas
dirias de manuteno e desenvolvimento de novas ferramentas para o
rgo. Alm disso, a base de dados era muito complexa e utilizava muitos
recursos que at ento estavam disponveis apenas no Oracle. Outro fator
negativo foi que poucos tcnicos tinham conhecimento em PostgreSQL.
Como a arquitetura do banco hoje?
Agora o servidor de aplicao ligado diretamente a um balanceador de
carga, que ligado a dois servidores do banco de dados.
Alm da economia com as licenas, quais outros resultados positivos a
nova arquitetura trouxe?
As consultas ficaram mais rpidas. Tem uma que levava 2 horas e,
depois da migrao, passou a ser realizada em 6 minutos. Na primeira
vez, o responsvel do Detran no acreditou e acabamos gastando as 2
horas tentando convencer que a consulta tinha sido mesmo realizada
em 6 minutos.

CASOS DE SUCESSO

Empresa qumica alem e uma das maiores empresas do mundo. No


Brasil tambm proprietria da empresa Suvinil, lder no mercado interno de
tintas. A BASF est presente em todos os pases da Amrica do Sul, com
exceo das Guianas e Suriname.
Beneficio do uso de PostGreSQL:
Reduo de custo: A combinao de PostGreSQL e software livre
resultou na reduo de custo Software/Hardware em 67 %.
Alta customizao: maior confiabilidade e mtricas de desempenho,
resultando em uma experincia melhor para o usurio.
Aumento da receita potencial: Embora seja cedo para dizer o quanto as
receitas do produto tm gerado diretamente, claro que a receita projetada
significativa.

CASOS DE SUCESSO

A Caixa precisava modernizar seu sistema de auto-atendimento


e decidiu pela substituio dos sistemas existentes. Este novo ambiente
ganhou o nome de Multicanal.
A 4Linux utilizou neste projeto os seguintes Softwares Livres:
Sistema operacional : Linux - distribuio Debian
Servidor de Aplicaes Java : Jboss
Banco de Dados : PostgreSQL
Durante os testes, a soluo baseada em Software Livre
construda pela 4Linux se mostrou com a melhor relao custo por
transao por segundo e foi a escolhida pela CAIXA para suportar a
infra-estrutura do Multicanal.
Atualmente o ambiente multicanal atende mais de 20.000
ATMs, picos de 6.000.000 de transaes bancrias e sociais por dia,
com mais de 18.000.000 de transaes de banco de dados por dia.
Passam pelo multicanal mais de R$ 1 bilho por ms.

CARACTERSTICAS
Licenciamento BSD. Esta licena garante total liberdade de uso, alterao, modificao e
distribuio do sistema. Ela tambm permite, inclusive, que verses proprietrias e comerciais
sejam criadas a partir do sistema licenciado nestes termos.
SGBD Objeto-Relacional (classes e hierarquia). O PostgreSQL est na mesma categoria de
outros SGBD's, tais como Oracle, Microsoft SQL Server e IBM DB2, que evoluram da
arquitetura de relacional para objeto-relacional,
Modularidade. Este recurso tem facilitado o trabalho dos desenvolvedores que desejam
implementar novas funcionalidades. Um exemplo disso, foi a criao do mdulo PostGIS,
contendo inmeras funcionalidades para o desenvolvimento de aplicaes que tratam a
geoinformao.

Inmeras interfaces nativas. O PostgreSQL pode ser acessado atravs das seguintes
interfaces: ODBC, JDBC, C, C++, PHP, Perl, TCL, ECPG, Python e Ruby. Neste quesito, o
PostgreSQL supera todos os demais SGBD's, pois nenhum outro possui tanta flexibilidade.
Flexibilidade: roda em vrias plataformas (BSD, Linux, Windows, mac, etc.)
Robusto: criado para suportar grande volume de dados e transaes concorrentes (Existem
sistemas ativos com o PostgreSQL em ambiente de produo que gerenciam mais de 4TB de
dados);
Funes em SQL, C, C++, PLpg/SQL, PL/Perl, PL/Python, PL/TCL suportadas nativamente alm
de PL/Java, PL/PHP, PL/R, PL/Ruby, PL/sh, PL/Mono.

TOTALMENTE ACID
ACID (acrnimo de Atomicidade, Consistncia, Isolamento e Durabilidade)

Atomicidade - uma transao totalmente executada ou totalmente


revertida sem deixar efeitos no banco de dados
Consistncia - os resultados so coerentes com as operaes realizadas
Isolamento - a execuo de uma transao no interfere ou sofre
interferncia em relao s demais transaes em execuo
Durabilidade - o resultado das transaes deve ser persistido fisicamente no
banco de dados.
Tudo transao;
Garanti que a base de dados ir guardar o conjunto de modificaes pendentes
de uma forma que o sistema pode recuper-las depois de um trmino anormal.
comandos de controle de transao:
BEGIN;
COMMIT;
ROLLBACK;
START TRANSACTION;
SAVEPOINT;
SET TRANSACTION;

ADMINISTRAO SERVIDOR
Rotina de Limpeza: Na operao normal do PostgreSQL, um
comando UPDATE ou DELETE em uma linha no remove imediatamente a
verso antiga da linha. Esta abordagem necessria para obter os benefcios do
controle de simultaneidade multi-verso a verso da linha no pode ser removida
enquanto houver possibilidade de ser acessada por outras transaes. Mas no
final, uma verso de linha desatualizada ou excluda no ter mais interesse para
nenhuma transao. O espao ocupado deve ser recuperado para ser reutilizado
pelas novas linhas, evitando um crescimento sem fim da necessidade de espao
em disco. Isto feito executando o comando VACUUM.

Arquitetura do PostGres
CLIENTE

SERVIDOR
Conexo inicial e autenticao

Aplicao
Cliente

postmaster
(daemon)

Buffer

Kernel
buffer

Fork

Conector
PostGre

Comunicao (Queries, resultados, etc)

postgre
postgre
(backend)
postgre
(backend)
(backend)

Tabelas
BD Fsico

Disco

ARQUITETURA DO POSTGRESQL
No jargo de banco de dados, o PostgreSQL utiliza o modelo cliente-servidor.
Uma sesso do PostgreSQL consiste nos seguintes processos:
Postmaster um processo servidor, que gerencia os arquivos de banco de dados,
recebe conexes dos aplicativos cliente com o banco de dados, e executa aes no
banco de dados em nome dos clientes.
Cliente pode ser uma ferramenta no modo caractere, um aplicativo grfico, um
servidor Web que acessa o banco de dados para mostrar pginas Web, ou uma
ferramenta especializada para manuteno do banco de dados.
O servidor PostgreSQL pode tratar vrias conexes simultneas de clientes. Para
esta finalidade iniciado um novo processo (fork) para cada conexo. Deste ponto em
diante, o cliente e o novo processo servidor se comunicam sem
interveno do processo postmaster original. Portanto, o postmaster est sempre
executando aguardando por novas conexes dos clientes.
Chamada de Sistema (Fork), Para criar um novo processo, o processo copia a si
prprio atravs da chamada de sistema fork. O fork cria uma cpia do processo original
que em grande parte idntica ancestral. O novo processo possui um PID
(identificador de processo) prprio, e suas prprias informaes de contabilizao.

ALGUMAS VANTAGENS
O PostgreSQL um banco maduro, com um histrico de desenvolvimento
iniciado em 1977.
Tem as principais caractersticas desejadas em um banco de dados:
Recuperao automtica aps crash de sistema (WAL);
MVCC (controle de concorrncia de multi-verso). Neste mecanismo, processos de
leitura no bloqueiam processos de escrita e vice-versa, reduzindo
drasticamente (s vezes,eliminando) a conteno entre transaes
concorrentes e paralisao parcial ou completa (deadlock);
Logging de transaes;
Commit / Rollback / Checkpoints;

Triggers / Stored Procedures;


Constraints / Foreign Keys;
Backup On-line;

ALGUMAS VANTAGENS
Algumas mudanas da verso mais recente
Replicao e Escalabilidade: Hot Standby, Replicao em Fluxo
Administrao e Segurana: Atualizao in Loco (Upgrade-in-Place) Integrada
(pg_upgrade), Autenticao RADIUS, Verificao de Fora de Senha (passwordcheck)
Comandos de Gesto de Permisses de Banco de Dados Facilitados (GRANT ON ALL
e DEFAULT PERMISSIONS)
Projeto de Bancos de Dados e SQL: Restries de Unicidade Postergveis, Gatilhos
Condicionais. Gatilhos por Colunas, Ordenamento em Agregaes, Novas "Windowing
Functions" (RANGE PRECEEDING e FOLLOWING).

Funes Armazenadas (Stored Procedures): Blocos de Cdigo de Procedimento


Annimos (comando DO), Melhorias nas Funes Armazenadas em Perl e Python
(incluindo suporte ao Python 3), Chamadas com Parmetros Nomeados
Performance e Recursos Avanados: Mensagens Assncronas Melhoradas
(LISTEN/NOTIFY), Suporte a Windows 64-bit, Otimizao para Consultas Geradas por
ORM (remoo de JOIN), Chaves nicas para Dados no Escalares (Exclusion
Constraints), Suporte Expantido para Dados Chave-Valor (HStore), Planos de Explain
em JSON e XML

FERRAMENTAS
PGAccess: esta a interface grfica para usurio (GUI) original do PostgreSQL,
no estilo do navegador de banco de dados do MS Access, escrito em Tcl/Tk.
phpPgAdmin: um clone do popular phpMyAdmin, otimizado para o PostgreSQL.
Esta uma ferramenta administrativa muito boa, robusta, e existe uma verso
totalmente em portugus. Funciona muito bem, tem muitas funcionalidades e
cdigo livre.
PGAdmin III: uma interface completa de administrao do PostgreSQL,
praticamente o cliente oficial.
OpenOffice.org: o OpenOffice.org 2 traz o aplicativo Base que via JDBC permite
uma manipulao bem avanada de bases de dados possibilitando o
desenvolvimento de formulrios e relatrios bem complexos.
Xpg: interface de administrao do banco de dados PostgreSQL baseado em
Java, com acesso a tabelas e entrada de dados, interface para consultas e
habilidade para exportar o resultado das mesmas para relatrios em HTML.
Porm tem algumas limitaes, algumas funes como criao de ndices no
podem ser feitas visualmente. de cdigo livre e tem um instalador RPM.

FERRAMENTAS

BACKUP, EVITANDO DESASTRES

Dump
Realiza dump consistente com o banco de dados on-line sem bloquear usurios
Podem ser selecionados parte dos objetos na exportao ou importao como
permisses, dados, esquemas, etc.
um dump pode ser exportado ou compactado diretamente para outro banco utilizando
pipe!

BACKUP, EVITANDO DESASTRES


Mtodo SQL-dump : A idia por trs do Mtodo SQL-dump gerar um arquivo texto
contendo comandos SQL que, ao serem processados pelo servidor, recriam o banco de
dados no mesmo estado em que este se encontrava quando o arquivo foi gerado. O
PostgreSQL disponibiliza o programa utilitrio pg_dump para esta finalidade. (o
pg_dump no bloqueia outras operaes no banco enquanto ta executando).
Cpia de segurana no nvel de sistema de arquivo: Uma estratgia alternativa para
fazer cpia de segurana, copiar diretamente os arquivos que o PostgreSQL usa para
armazenar os dados dos bancos de dados. (O servidor de dados precisa estar
totalmente parado tanto na hora de fazer a cpia como na hora re restaurar).
Cpia de segurana em-linha: Durante todo o tempo, o PostgreSQL mantm o
registro de escrita prvia (WAL = write ahead log) no subdiretrio pg_xlog do diretrio
de dados do agrupamento. O WAL contm todas as alteraes realizadas nos arquivos
de dados do banco de dados. O WAL existe, principalmente, com a finalidade de
fornecer segurana contra quedas: se o sistema cair, o banco de dados pode retornar a
um estado consistente refazendo as entradas gravadas desde o ltimo ponto de
controle. Se for necessrio fazer a recuperao, pode ser feita a recuperao da cpia
de segurana do banco de dados no nvel de sistema de arquivos e, depois, refeitas as
alteraes a partir da cpia dos arquivos de segmento do WAL, para trazer a
restaurao para o tempo presente.

Iniciando no PostGreSQL

Como montar nesse elefante gigante?

CONECTANDO AO BANCO

CRIANDO O BANCO DE DADOS


CREATE DATABASE nome_do_banco
OWNER dono_do_banco
TEMPLATE template
ENCODING codificao
TABLESPACE tablespace
OWNER Normalmente, o criador se torna o dono do novo banco de dados. Os
superusurios podem criar bancos de dados cujos donos so outros usurios
utilizando a clusula;
TEMPLATE Por padro, o novo banco de dados criado clonando o banco de
dados comum do sistema template1. Um modelo diferente pode ser especificado
escrevendo TEMPLATE modelo;
ENCODING Codificao do conjunto de caracteres a ser utilizado no novo banco
de dados;
TABLESPACE O nome do espao de tabelas associado ao novo banco de dados,
ou DEFAULT para utilizar o espao de tabelas do banco de dados modelo;

CONCEITO DE SCHEMAS NO POSTGRESQL


A partir da verso 7.3, o PostgreSQL iniciou o suporte a Schema, no qual
possvel criar um espao lgico (namespace) dentro do banco de dados para
armazenar os objetos: Dados, tabelas, funes, etc.
CREATE SCHEMA nome_do_esquema AUTHORIZATION nome_do_usurio
Ou
CREATE SCHEMA AUTHORIZATION nome_do_usurio
Obs: Se for omitido, o nome do usurio ser usado como o nome do esquema.

AUTHORIZATION Possibilita a criao de um schema para outro


usurio.
Um usurio pode ter vrios schemas;
Um banco de dados pode ter vrios schemas;

CRIANDO TABELAS
CREATE TABLE nome_do_schema.nome_da_tabela (
nome_da_coluna

tipo_de_dado [restrio_de_coluna]

) INHERITS (tabela_ancestral)
TABLESPACE espao_de_tabela

Tipo de dados:
Tipo Base:

Todos os tipos SQL;

Tipo Composto: Um tipo composto simplesmente uma lista de tipos base


com nomes de campo associados.
Tipo Domnio:

Baseia em um determinado tipo base, porm tem restries


limitando os valores vlidos.

RESTRIO DE COLUNA E RESTRIO DE TABELA

RESTRIO DE COLUNA
CHECK
CREATE TABLE produtos (
cod_prod integer,
nome
text,
preco
numeric CHECK (preco > 0)
);

UNIQUE
CREATE TABLE exemplo (
a integer UNIQUE,
b integer,
c integer,
);

PRIMARY KEY
CREATE TABLE produtos (
cod_prod integer PRIMARY KEY,
nome
text,
preco numeric

RESTRIO DE TABELA
CREATE TABLE produtos (
cod_prod integer,
nome
text,
preco
numeric,
CONSTRAINT CK_preco CHECK(preco>0)
);
CREATE TABLE exemplo (
a integer,
b integer,
c integer,
CONSTRAINT U_exemplo UNIQUE(a)
);
CREATE TABLE produtos (
cod_prod integer,
nome
text,
preco numeric,
CONSTRAINT PK_produtos PRIMARY KEY(cod_prod)
);

);

FOREIGN KEY
CREATE TABLE pedidos (
cod_pedido integer PRIMARY KEY,
cod_prod integer REFERENCES produtos (cod_prod),
quantidade integer
);

CREATE TABLE pedidos (


cod_pedido integer PRIMARY KEY,
cod_prod integer,
quantidade integer,
CONSTRAINT FK_prod FOREIGN KEY (cod_prod) REFERENCES
produto(cod_prod)
);

SEQUENCE E AUTO-INCREMENTO
CREATE SEQUENCE nome
INCREMENT BY incremento
MINVALUE valor_mnimo
MAXVALUE valor_mximo
START WITH incio
Ver estado atual da sequence:
SELECT * FROM nome_da_sequence;

Selecionar o prximo valor desta seqncia:


SELECT nextval(nome_da_sequence');
Utilizar esta seqncia no comando INSERT:
INSERT INTO distribuidores VALUES (nextval('serial'), 'nada');

Obs.: No Oracle nextval e currval so pseudocolunas e no funes.

SEQUENCE E AUTO-INCREMENTO
Modos de se obter colunas de auto-incremento:
Usando uma sequence:
CREATE SEQUENCE seq_teste INCREMENT BY 1 MINVALUE 1 START WITH 1;
CREATE TABLE testesequence(
id integer DEFAULT nextval('seq_teste') NOT NULL,
nome varchar(50)
)

Usando os tipos SERIAL ou BIGSERIAL:


Serial: inteiro de quatro bytes com auto-incremento;
Bigserial : inteiro de oito bytes com auto-incremento.
Tipo Serial 4 bytes: de 1 a 2147483647
Tipo bigserial 8 bytes: de 1 a 9223372036854775807
CREATE TABLE pessoa(
id serial PRIMARY KEY,
nome varchar(50)
)
Obs: Os tipos de dado serial e bigserial no so tipos verdadeiros, mas meramente uma notao
conveniente para definir colunas identificadoras nicas (semelhante propriedade
AUTO_INCREMENTO existente em alguns outros bancos de dados).
Mudando o valor inicial de uma sequence usando SERIAL:
ALTER SEQUENCE tabela_coluna_seq RESTART WITH 1000;

HERDANDO DE OUTRA TABELA


INHERITS (herda) especifica uma lista de tabelas das quais a
nova tabela herda, automaticamente, todas as colunas.
O uso de INHERITS cria um relacionamento persistente entre a nova
tabela descendente e suas tabelas ancestrais. As modificaes de
esquema nas tabelas ancestrais normalmente se propagam para as
tabelas descendentes.
Dois inserts na tabela filho:

Exemplo:
CREATE TABLE tabelaPai (
id serial PRIMARY KEY,
nome varchar(40)
)
CREATE TABLE tabelaFilho(
sobrenome varchar(40)
)INHERITS(tabelaPai)

INSERT INTO tabelaFilho (nome,sobrenome) VALUES ('Bazinga','Da Silva')


INSERT INTO tabelaFilho (nome,sobrenome) VALUES ('Fulano','De Tal')

Um insert na tabela pai:


INSERT INTO tabelaPai (nome) VALUES ('Chewbacca')

Select tabela filho:

Select tabela pai:

Problema com o

O principal problema era a incapacidade do modelo


relacional compreender tipos (atualmente, chamados
de objetos), ou seja, combinaes de dados simples que
formam uma nica unidade.

OBJETO RELACIONAL

Tipos de Dados:

CREATE TYPE endereco AS (


rua varchar,
numero integer
)

Uso em tabela:

CREATE TABLE pessoa (


id SERIAL PRIMARY KEY,
nome varchar,
endereco endereco
)

Inserindo:

INSERT INTO pessoa(nome,endereco)


VALUES (Fulano ',(R. Jos das Cuias',11))
Coluna nica obrigado usar ROW

INSERT INTO pessoa (endereco)


VALUES (ROW('Street Sand',69))

INTRODUO
PL/pgSQL uma linguagem procedural carregvel desenvolvida para o
sistema de banco de dados PostgreSQL. Os objetivos de projeto da
linguagem PL/pgSQL foram no sentido de criar uma linguagem
procedural carregvel que pudesse:

ser utilizada para criar procedimentos de funes e de gatilhos;


adicionar estruturas de controle linguagem SQL;
realizar processamentos complexos;
herdar todos os tipos de dado, funes e operadores definidos pelo
usurio;
ser definida como confivel pelo servidor;
ser fcil de utilizar.

ESTRUTURA DE UMA FUNO EM PL/PGSQL

CREATE OR REPLACE FUNCTION NOME_DA_FUNO (


Variavel TIPO,
S possui parmetros IN.
) RETURNS TIPO AS $$
DECLARE
Delimitador
Variavel TIPO;
BEGIN
instrues
RETURN;
Definio da Linguagem
EXCEPTION
WHEN tipo_da_excesso THEN
instrues_do_tratador
RETURN ;
END;
$$ LANGUAGE plpgsql;

TIPOS EM PL/PGSQL
Copiando Tipo: tabela.coluna%TYPE;
Tipo de Linha: tabela%ROWTYPE;
Tipo Registro: As variveis registro so semelhantes s variveis tipolinha, mas no possuem uma estrutura pr-definida.
Declarao:
DECLARE
registro_usuario RECORD;
BEGIN
SELECT INTO registro_usuario * FROM usuarios WHERE id_usuario=3;
Tipo CURSOR: Em vez de executar toda a consulta de uma vez,
possvel definir um cursor encapsulando a consulta e, depois, ler umas
poucas linhas do resultado da consulta de cada vez.
Declarao:
curs1 refcursor;
curs2 CURSOR FOR SELECT * FROM tenk1;

DOMNIO
Domnios so teis para abstrair campos comuns entre tabelas
em um nico local para manuteno. Por exemplo, uma coluna de
endereo de correio eletrnico pode ser usada em vrias tabelas, todas
com as mesmas propriedades. Em vez de definir as restries em cada
tabela individualmente, deve ser definido e utilizado um domnio.

CREATE DOMAIN nome_do_dominio


AS tipo
CHECK( condio)

DOMNIO
Exemplo:
--Criao da funo que valida tipo sanguineo

CREATE OR REPLACE FUNCTION validarSangue(p1 varchar)


RETURNS boolean AS $$
BEGIN
RETURN (lower(p1) IN ('a', 'b', 'ab', 'o'));
END;
$$ LANGUAGE plpgsql;
CREATE DOMAIN tipoSanguineo AS varchar CHECK( validarSangue(VALUE))
CREATE TABLE pessoa2 (
id serial PRIMARY KEY,
nome varchar(50),
sangue tipoSanguineo
)
INSERT INTO pessoa2(nome,sangue) VALUES ('vovozona','a'); //Insero ok!
INSERT INTO pessoa2(nome,sangue) VALUES ('Sheldon','y');

Em que situao o PostGreSQL deve ser


usado ?

O que andam falando


do PostGreSQL ?

Tem suporte ?
Seguro ?
Tem Atualizaes?
Rapido?

REFERNCIAS BIBLIOGRFICAS

Documentao Oficial Traduzida:


http://wiki.postgresql.org.br/Documenta%C3%A7%C3%A3o?action=AttachFile&do=get&target=manual_pg.pdf.zip

Fim

Você também pode gostar