SlideShare uma empresa Scribd logo
PostGreSQL
PostgreSQL é um sistema gerenciador de banco de dados objeto relacional (SGBDOR), 
desenvolvido como projeto de código aberto.
Grupo: Ysmaylyka Soares Macedo
Darcius Ferreira Lisboa Oliveira
Rodrigo Vasconcelos de Medeiros
OPEN SOURCE
Foi criado pela OSI (Open Source Initiative) e refere-se a
software também 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 cópias.
4ª liberdade: A liberdade de melhorar o programa e de tornar as modificações
públicas de modo que a comunidade inteira beneficie da melhoria.
A realização de tais ações é reservada, pelo conceito de direito de
autor, aos detentores dos direitos, que necessitam assim de permitir de forma
explícita estas liberdades recorrendo a uma licença de software livre.
LICENÇAS OPEN SOURCES
Algumas licenças:
General Public License (Licença Pública Geral): A GPL é a licença com maior
utilização por parte de projetos de software livre, em grande parte devido à sua
adoção para o projeto GNU e o sistema operacional GNU/Linux.
Licença Apache é uma licença 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
licença Apache.
BSD permite que o software distribuído sob a licença, seja incorporado a produtos
proprietários. Trabalhos baseados no material podem até ser liberados com licença
proprietária. Alguns exemplos notáveis são: o uso de código do BSD (funções 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 LICENÇAS
GPL
BSD
Express
- Limitação ao tamanho dos dados (máximo 4Gb)
- Limitação ao tamanho de memória (máximo 1Gb)
Informix
-No Maximo um Processador e 2 GB de memória.
UM POUCO DA HISTORIA DO POSTGRE
Após seu retorno a Berkeley, em 1985, Stonebraker começou um projeto pós-
Ingres 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. 
O  PostgreSQL  é  um  dos  resultados  de  uma 
ampla  evolução  que  se  iniciou  com  o  projeto Ingres, 
desenvolvido na Universidade de Berkeley, Califórnia. 
O líder do projeto, Michael Stonebraker, um dos pioneiros dos bancos de dados 
relacionais, deixou a universidade em 1982 para comercializar o Ingres, porém retornou a 
ela logo em seguida.
*Agência de Pesquisas em Projetos Avançados
UM POUCO DA HISTORIA DO POSTGRE
 Estas funcionalidades incluíam a habilidade de definir tipos, mas também a 
habilidade  de  descrever  relações  -  as  quais  até  este  momento  eram  amplamente 
utilizadas, mas completamente mantidas pelo usuário. No Postgres, o banco de dados 
"compreendia"  as  relações  e  podia  obter  informações  de  tabelas  relacionadas 
utilizando regras.
 O principal problema era a incapacidade do modelo relacional compreender 
“tipos” (atualmente, chamados de objetos), ou seja, combinações de dados simples que 
formam uma única unidade.
  O  projeto  resultante,  chamado  Postgres,  era  orientado  a  introduzir  a  menor 
quantidade possível de funcionalidades para completar o suporte a tipos.
UM POUCO DA HISTORIA DO POSTGRE
  As  principais  características  acrescentadas  nas  versões  6.x  são  MVCC 
(Multiversion Concurrency Control – Controle de Concorrência Multiversões), melhorias 
no  SQL  e  novos  tipos  de  dados  nativos  (novos  tipos  de  datas  e  hora  e  tipos 
geométricos).
  Em  agosto  de  1996,  Marc  Fournier,  Bruce  Momjian  e  Vadim  B.  Mikheev 
lançaram  a  primeira  versão  externa  da  Universidade  de  Berkeley  e  deram  início  à 
tarefa de estabilizar o código herdado. Também em 1996, o projeto foi renomeado 
para PostgreSQL a fim de refletir a nova linguagem de consulta ao banco de dados: 
SQL. A primeira versão de PostgreSQL, a 6.0, foi liberada em janeiro de 1997. Desde 
então, um grupo de desenvolvedores e de voluntários de todo o mundo, coordenados 
pela Internet, têm mantido o software e desenvolvido novas funcionalidades.
UM POUCO DA HISTORIA DO POSTGRE
A versão 8.0 foi lançada 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  -  através  da  biblioteca 
Cygwin).  Dentre  as  muitas  novidades  da  versão  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 lançada a versão mais recente: 8.4.
Em  maio  de  2000  foi  liberada  a  versão  7.0.  As  versões  7.x  trouxeram  as 
seguintes novas funcionalidades: Write-Ahead Log (WAL), esquemas SQL, outer joins, 
suporte  a  IPv6,  indexação  por  texto,  suporte  melhorado  a  SSL  e  informações 
estatísticas do banco de dados.
Em um sistema usando WAL, todas as modificações são gravadas em um log antes de serem
aplicadas.
Uma das principais vantagens da utilização do WAL é um número reduzido de forma
significativa de gravações em disco, pois somente o arquivo de log deve ser liberado para o
disco no momento da confirmação da transação, ao invés de cada arquivo de dados alterados
pela transação. Em ambientes de multiusuários, efetivação de várias transações podem ser
realizadas com um único fsync do arquivo de log
UM POUCO DA HISTORIA DO POSTGRE
Administração e Segurança 
•Atualização in Loco (Upgrade-in-Place) Integrada (pg_upgrade)
•Autenticação RADIUS
•Verificação de Força de Senha (passwordcheck)
•Comandos de Gestão de Permissões de Banco de Dados Facilitados (GRANT ON ALL e DEFAULT 
PERMISSIONS)
Performance e Recursos Avançados 
•Mensagens Assíncronas Melhoradas (LISTEN/NOTIFY)
•Suporte a Windows 64-bit
•Otimização para Consultas Geradas por ORM (remoção de JOIN)
•Chaves Únicas para Dados não Escalares (Exclusion Constraints)
•Suporte Expantido para Dados Chave-Valor (HStore)
•Planos de Explain em JSON e XML
O PostgreSQL 9.0 inclui ainda dezenas de outras grandes melhorias que
aprimoram todos os aspectos do projeto e da performance de aplicações de
bancos de dados, incluindo: suporte a windows 64 bits, gatilhos condicionais e
por coluna, atualização in loco da 8.3 e 8.4, restrições de unicidade
postergáveis, e mensagens assíncronas de alto desempenho
COMO PARTICIPAR ?
O PostgreSQL é um projeto open source coordenado pelo PostgreSQL Global
Development Group. Embora as atividades do grupo sejam patrocinadas por
diversas organizações 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 voluntários, espalhados por todo o mundo e que
se comunicam via Internet. Logo, trata-se, de um projeto direcionado pela
comunidade de desenvolvedores e de usuários, a qual qualquer pessoa pode se
juntar, bastando se inscrever em listas de discussão e participar delas.
Voluntários interessados em contribuir com o projeto também podem consultar as
sugestões de tarefas de desenvolvimento de novas funções e de correções de
erros que são publicadas ou apresentar suas próprias sugestões. O código
desenvolvido é submetido à equipe do projeto que pode aceitá-lo e incluí-lo nas
novas versões ou recusá-lo. Voluntários também podem colaborar gerando
documentação ou realizando traduções!
LICENÇA
O PostgreSQL usa a licença BSD, que requer apenas que o código fonte
licenciado mantenha seu direito de cópia e informação da licença. Esta licença
certificada pela OSI é amplamente vista como flexível e amigável à empresas, já
que ela não restringe o uso do PostgreSQL com aplicações comerciais e
proprietárias. Juntamente com suporte de múltiplas empresas e propriedade
pública do código, a licença BSD torna o PostgreSQL muito popular com
fabricantes que querem anexar um banco de dados com seus próprios produtos
sem medo de ônus financeiro, prisão à um só fabricante, ou mudanças nos termos
de licenças.
LINGUAGEM
A principal linguagem de programação utilizada no desenvolvimento do
PostgreSQL 8.3.0 é o ANSI C. Entretanto, também são utilizadas minoritariamente
outras linguagens conforme mostra a tabela.
Linguagens de Programação utilizadas no PostgreSQL 8.3.0
Linguagem Linhas de código %
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 Máximo do Banco de Dados
• Tamanho máximo de uma Tabela
• Tamanho Máximo de uma Linha
• Tamanho Máximo de um Campo
• Máximo de Linhas por Tabela
• Máximo de Colunas por Tabela
• Máximo de Índices por Tabela
Ilimitado
32 TB
1.6 TB
1 GB
Ilimitado
250–1600 dependendo do tipo de coluna
Ilimitado
ESTADO ATUAL
Além de doações, o projeto PostgreSQL se sustenta pelo patrocínio de diversas
empresas, entre as quais se destacam: Fujitsu, Hub.Org, NTT Group, Red Hat,
Skype, SRA e Sun Microsystems.
O software tem adquirido prestígio na comunidade Linux, tendo recebido diversas
vezes o prêmio Linux Journal Editor's Choice de melhor sistema de gerenciamento
de banco de dados (SGBD).
A aceitação do PostgreSQL tem se ampliado para além da comunidade de código
aberto. Há entre os seus usuários grandes empresas internacionais, órgãos
governamentais de vários países e universidades de prestígio mundial. Existe uma
lista dos principais usuários no Brasil e no mundo e, também, há alguns estudos de
caso de aplicações que utilizam o PostgreSQL.
CASOS DE SUCESSO
Empresa química alemã e uma das maiores empresas do mundo. No
Brasil é também proprietária da empresa Suvinil, líder no mercado interno de
tintas. A BASF está presente em todos os países da América do Sul, com
exceção das Guianas e Suriname.
Beneficio do uso de PostGreSQL:
• Redução de custo: A combinação de PostGreSQL e software livre
resultou na redução de custo Software/Hardware em 67 %.
• Alta customização: maior confiabilidade e métricas de desempenho,
resultando em uma experiência melhor para o usuário.
• Aumento da receita potencial: Embora seja cedo para dizer o quanto as
receitas do produto têm gerado diretamente, é claro que a receita projetada
é significativa.
A Caixa precisava modernizar seu sistema de auto-atendimento e
decidiu pela substituição dos sistemas existentes. Este novo ambiente ganhou o
nome de Multicanal.
A 4Linux utilizou neste projeto os seguintes Softwares Livres:
• Sistema operacional : Linux - distribuição Debian
• Servidor de Aplicações Java : Jboss
• Banco de Dados : PostgreSQL
Durante os testes, a solução baseada em Software Livre
construída pela 4Linux se mostrou com a melhor relação custo por
transação 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 transações bancárias e sociais por dia,
com mais de 18.000.000 de transações de banco de dados por dia.
Passam pelo multicanal mais de R$ 1 bilhão por mês.
CASOS DE SUCESSO
CARACTERÍSTICAS
• Licenciamento BSD. Esta licença garante total liberdade de uso, alteração, modificação e
distribuição do sistema. Ela também permite, inclusive, que versões proprietárias 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 evoluíram 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 criação do módulo PostGIS,
contendo inúmeras funcionalidades para o desenvolvimento de aplicações que tratam a
geoinformação.
• Inúmeras interfaces nativas. O PostgreSQL pode ser acessado através 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 várias plataformas (BSD, Linux, Windows, mac, etc.)
• Robusto: criado para suportar grande volume de dados e transações concorrentes (Existem
sistemas ativos com o PostgreSQL em ambiente de produção que gerenciam mais de 4TB de
dados);
• Funções em SQL, C, C++
, PLpg/SQL, PL/Perl, PL/Python, PL/TCL suportadas nativamente além
de PL/Java, PL/PHP, PL/R, PL/Ruby, PL/sh, PL/Mono.
TOTALMENTE ACID
• Tudo é transação;
• Garanti que a base de dados irá guardar o conjunto de modificações pendentes
de uma forma que o sistema pode recuperá-las depois de um término anormal.
• comandos de controle de transação:
• BEGIN;
• COMMIT;
• ROLLBACK;
•START TRANSACTION;
•SAVEPOINT;
•SET TRANSACTION;
ACID (acrônimo de Atomicidade, Consistência, Isolamento e Durabilidade)
Atomicidade - uma transação é totalmente executada ou totalmente
revertida sem deixar efeitos no banco de dados
Consistência - os resultados são coerentes com as operações realizadas
Isolamento - a execução de uma transação não interfere ou sofre
interferência em relação às demais transações em execução
Durabilidade - o resultado das transações deve ser persistido fisicamente no
banco de dados.
ADMINISTRAÇÃO SERVIDOR
• Rotina de Limpeza: Na operação normal do PostgreSQL, um
comando UPDATE ou DELETE em uma linha não remove imediatamente a
versão antiga da linha. Esta abordagem é necessária para obter os benefícios do
controle de simultaneidade multi-versão a versão da linha não pode ser removida
enquanto houver possibilidade de ser acessada por outras transações. Mas no
final, uma versão de linha desatualizada ou excluída não terá mais interesse para
nenhuma transação. O espaço ocupado deve ser recuperado para ser reutilizado
pelas novas linhas, evitando um crescimento sem fim da necessidade de espaço
em disco. Isto é feito executando o comando VACUUM.
Arquitetura do PostGres
CLIENTE
Aplicação
Cliente
Conector
PostGre
SERVIDOR
postmaster
(daemon)
postgre
(backen
d)
postgre
(backen
d)
postgre
(backen
d)
Fork
Conexão inicial e autenticação
Comunicação (Queries, resultados, etc)
BD Físico
Tabelas
Buffer
Kerne
l
buffe
r
Disco
ARQUITETURA DO POSTGRESQL
No jargão de banco de dados, o PostgreSQL utiliza o modelo cliente-servidor.
Uma sessão do PostgreSQL consiste nos seguintes processos:
 Postmaster um processo servidor, que gerencia os arquivos de banco de dados,
recebe conexões dos aplicativos cliente com o banco de dados, e executa ações no
banco de dados em nome dos clientes.
 Cliente pode ser uma ferramenta no modo caractere, um aplicativo gráfico, um
servidor Web que acessa o banco de dados para mostrar páginas Web, ou uma
ferramenta especializada para manutenção do banco de dados.
 O servidor PostgreSQL pode tratar várias conexões simultâneas de clientes. Para
esta finalidade é iniciado um novo processo (fork) para cada conexão. Deste ponto em
diante, o cliente e o novo processo servidor se comunicam sem
intervenção do processo postmaster original. Portanto, o postmaster está sempre
executando aguardando por novas conexões dos clientes.
 Chamada de Sistema (Fork), Para criar um novo processo, o processo copia a si
próprio através da chamada de sistema fork. O fork cria uma cópia do processo original
que é em grande parte idêntica à ancestral. O novo processo possui um PID
(identificador de processo) próprio, e suas próprias informações de contabilização.
ALGUMAS VANTAGENS
O PostgreSQL é um banco maduro, com um histórico de desenvolvimento
iniciado em 1977.
Tem as principais características desejadas em um banco de dados:
 Recuperação automática após crash de sistema (WAL);
 MVCC (controle de concorrência de multi-versão). Neste mecanismo, processos de
leitura não bloqueiam processos de escrita e vice-versa, reduzindo
drasticamente (às vezes,eliminando) a contenção entre transações concorrentes e
paralisação parcial ou completa (deadlock);
 Logging de transações;
 Commit / Rollback / Checkpoints;
 Triggers / Stored Procedures;
 Constraints / Foreign Keys;
Backup On-line;
ALGUMAS VANTAGENS
Algumas mudanças da versão mais recente
Replicação e Escalabilidade: Hot Standby, Replicação em Fluxo
Administração e Segurança: Atualização in Loco (Upgrade-in-Place) Integrada
(pg_upgrade), Autenticação RADIUS, Verificação de Força de Senha (passwordcheck)
Comandos de Gestão de Permissões de Banco de Dados Facilitados (GRANT ON ALL
e DEFAULT PERMISSIONS)
Projeto de Bancos de Dados e SQL: Restrições de Unicidade Postergáveis, Gatilhos
Condicionais. Gatilhos por Colunas, Ordenamento em Agregações, Novas "Windowing
Functions" (RANGE PRECEEDING e FOLLOWING).
Funções Armazenadas (Stored Procedures): Blocos de Código de Procedimento
Anônimos (comando DO), Melhorias nas Funções Armazenadas em Perl e Python
(incluindo suporte ao Python 3), Chamadas com Parâmetros Nomeados
Performance e Recursos Avançados: Mensagens Assíncronas Melhoradas
(LISTEN/NOTIFY), Suporte a Windows 64-bit, Otimização para Consultas Geradas por
ORM (remoção de JOIN), Chaves Únicas para Dados não Escalares (Exclusion
Constraints), Suporte Expantido para Dados Chave-Valor (HStore), Planos de Explain
em JSON e XML
PGAccess: esta é a interface gráfica para usuário (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 versão
totalmente em português. Funciona muito bem, tem muitas funcionalidades e é
código livre.
PGAdmin III: uma interface completa de administração do PostgreSQL,
praticamente o cliente oficial.
OpenOffice.org: o OpenOffice.org 2 traz o aplicativo Base que via JDBC permite
uma manipulação bem avançada de bases de dados possibilitando o
desenvolvimento de formulários e relatórios bem complexos.
Xpg: interface de administração 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 relatórios em HTML.
Porém tem algumas limitações, algumas funções como criação de índices não
podem ser feitas visualmente. É de código livre e tem um instalador RPM.
FERRAMENTAS
BACKUP, EVITANDO DESASTRES
Dump
•
Realiza dump consistente com o banco de dados on-line sem bloquear usuários
•
Podem ser selecionados parte dos objetos na exportação ou importação como
permissões, dados, esquemas, etc.
•
um dump pode ser exportado ou compactado diretamente para outro banco utilizando pipe!
Método SQL-dump : A idéia por trás do Método 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 utilitário pg_dump para esta finalidade. (o pg_dump
não bloqueia outras operações no banco enquanto ta executando).
BACKUP, EVITANDO DESASTRES
Cópia de segurança no nível de sistema de arquivo: Uma estratégia alternativa para
fazer cópia de segurança, é 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 cópia como na hora re restaurar).
Cópia de segurança em-linha: Durante todo o tempo, o PostgreSQL mantém o
registro de escrita prévia (WAL = write ahead log) no subdiretório pg_xlog do diretório
de dados do agrupamento. O WAL contém todas as alterações realizadas nos arquivos
de dados do banco de dados. O WAL existe, principalmente, com a finalidade de
fornecer segurança 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 necessário fazer a recuperação, pode ser feita a recuperação da cópia
de segurança do banco de dados no nível de sistema de arquivos e, depois, refeitas as
alterações a partir da cópia dos arquivos de segmento do WAL, para trazer a
restauração para o tempo presente.
CRIANDO O BANCO DE DADOS
CREATE DATABASE nome_do_banco
OWNER dono_do_banco
TEMPLATE template
ENCODING codificação
TABLESPACE tablespace
OWNER Normalmente, o criador se torna o dono do novo banco de dados. Os
superusuários podem criar bancos de dados cujos donos são outros usuários
utilizando a cláusula;
TEMPLATE Por padrão, 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 Codificação do conjunto de caracteres a ser utilizado no novo banco
de dados;
TABLESPACE O nome do espaço de tabelas associado ao novo banco de dados,
ou DEFAULT para utilizar o espaço de tabelas do banco de dados modelo;
CONCEITO DE SCHEMAS NO POSTGRESQL
A partir da versão 7.3, o PostgreSQL iniciou o suporte a Schema, no qual
é possível criar um espaço lógico (namespace) dentro do banco de dados para
armazenar os objetos: Dados, tabelas, funções, etc.
CREATE SCHEMA nome_do_esquema AUTHORIZATION nome_do_usuário
Ou
CREATE SCHEMA AUTHORIZATION nome_do_usuário
Obs: Se for omitido, o nome do usuário será usado como o nome do esquema.
AUTHORIZATION Possibilita a criação de um schema para outro
usuário.
 Um usuário pode ter vários schemas;
 Um banco de dados pode ter vários schemas;
CRIANDO TABELAS
CREATE TABLE nome_do_schema.nome_da_tabela (
nome_da_coluna tipo_de_dado [restrição_de_coluna]
) INHERITS (tabela_ancestral)
TABLESPACE espaço_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 Domínio: Baseia em um determinado tipo base, porém tem restrições
limitando os valores válidos.
RESTRIÇÃO DE COLUNA E RESTRIÇÃO DE TABELA
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
);
FOREIGN KEY
CREATE TABLE pedidos (
cod_pedido integer PRIMARY KEY,
cod_prod integer REFERENCES produtos (cod_prod),
quantidade integer
);
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)
);
CREATE TABLE pedidos (
cod_pedido integer PRIMARY KEY,
cod_prod integer,
quantidade integer,
CONSTRAINT FK_prod FOREIGN KEY (cod_prod) REFERENCES
produto(cod_prod)
);
RESTRIÇÃO DE COLUNA RESTRIÇÃO DE TABELA
SEQUENCE E AUTO-INCREMENTO
CREATE SEQUENCE nome
INCREMENT BY incremento
MINVALUE valor_mínimo
MAXVALUE valor_máximo
START WITH início
Ver estado atual da sequence:
SELECT * FROM nome_da_sequence;
Selecionar o próximo valor desta seqüência:
SELECT nextval(‘nome_da_sequence');
Utilizar esta seqüência no comando INSERT:
INSERT INTO distribuidores VALUES (nextval('serial'), 'nada');
Obs.: No Oracle nextval e currval são pseudocolunas e não funções.
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 não são tipos verdadeiros, mas meramente uma notação
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 modificações de
esquema nas tabelas ancestrais normalmente se propagam para as
tabelas descendentes.
Exemplo:
CREATE TABLE tabelaPai (
id serial PRIMARY KEY,
nome varchar(40)
)
CREATE TABLE tabelaFilho(
sobrenome varchar(40)
)INHERITS(tabelaPai)
Dois inserts na tabela filho:
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:
PL/pgSQL é uma linguagem procedural carregável 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
carregável que pudesse:
• ser utilizada para criar procedimentos de funções e de gatilhos;
• adicionar estruturas de controle à linguagem SQL;
• realizar processamentos complexos;
• herdar todos os tipos de dado, funções e operadores definidos pelo
usuário;
• ser definida como confiável pelo servidor;
• ser fácil de utilizar.
INTRODUÇÃO
CREATE OR REPLACE FUNCTION NOME_DA_FUNÇÃO (
Variavel TIPO,
) RETURNS TIPO AS $$
DECLARE
Variavel TIPO;
BEGIN
instruções
RETURN;
EXCEPTION
WHEN tipo_da_excessão THEN
instruções_do_tratador
RETURN ;
END;
$$ LANGUAGE plpgsql;
ESTRUTURA DE UMA FUNÇÃO EM PL/PGSQL
Só possui parâmetros IN.
Delimitador
Definição da Linguagem
TIPOS EM PL/PGSQL
• Copiando Tipo: tabela.coluna%TYPE;
• Tipo de Linha: tabela%ROWTYPE;
• Tipo Registro: As variáveis registro são semelhantes às variáveis tipo-
linha, mas não possuem uma estrutura pré-definida.
Declaração:
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, é
possível definir um cursor encapsulando a consulta e, depois, ler umas
poucas linhas do resultado da consulta de cada vez.
Declaração:
curs1 refcursor;
curs2 CURSOR FOR SELECT * FROM tenk1;
Domínios são úteis para abstrair campos comuns entre tabelas
em um único local para manutenção. Por exemplo, uma coluna de
endereço de correio eletrônico pode ser usada em várias tabelas, todas
com as mesmas propriedades. Em vez de definir as restrições em cada
tabela individualmente, deve ser definido e utilizado um domínio.
CREATE DOMAIN nome_do_dominio
AS tipo
CHECK( condição)
DOMÍNIO
DOMÍNIO
Exemplo:
--Criação da função 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'); //Inserção ok!
INSERT INTO pessoa2(nome,sangue) VALUES ('Sheldon','y');
REFERÊNCIAS BIBLIOGRÁFICAS
Documentação Oficial Traduzida:
http://wiki.postgresql.org.br/Documenta%C3%A7%C3%A3o?action=AttachFile&do=get&target=manual_pg.pdf.zip

Mais conteúdo relacionado

Mais procurados

PostgreSQL Tutorial For Beginners | Edureka
PostgreSQL Tutorial For Beginners | EdurekaPostgreSQL Tutorial For Beginners | Edureka
PostgreSQL Tutorial For Beginners | Edureka
Edureka!
 
Banco de Dados - Transações e Controle de Concorrência
Banco de Dados - Transações e Controle de ConcorrênciaBanco de Dados - Transações e Controle de Concorrência
Banco de Dados - Transações e Controle de Concorrência
Juliano Padilha
 
Treinamento PowerBI
Treinamento  PowerBITreinamento  PowerBI
Treinamento PowerBI
tiaquarius
 
Desenvolvimento Mobile
Desenvolvimento MobileDesenvolvimento Mobile
Desenvolvimento Mobile
Elton Minetto
 
Aula 4 - Sistemas Gerenciadores de Banco de Dados
Aula 4 - Sistemas Gerenciadores de Banco de DadosAula 4 - Sistemas Gerenciadores de Banco de Dados
Aula 4 - Sistemas Gerenciadores de Banco de Dados
Vitor Hugo Melo Araújo
 
Banco de dados orientados a objetos
Banco de dados orientados a objetos Banco de dados orientados a objetos
Banco de dados orientados a objetos
Raquel Machado
 
Sistema Operacional Android
Sistema Operacional AndroidSistema Operacional Android
Sistema Operacional Android
Lucas Damasceno
 
Sistemas operacionais mobile
Sistemas operacionais mobileSistemas operacionais mobile
Sistemas operacionais mobile
Daniel Brandão
 
Banco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQLBanco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQL
Daniel Brandão
 
Apresentação da UML
Apresentação da UMLApresentação da UML
Apresentação da UML
Eliseu Castelo
 
Aula - Modelos de Processos de Desenvolvimento de Software / Mobile App
Aula - Modelos de Processos de Desenvolvimento de Software / Mobile AppAula - Modelos de Processos de Desenvolvimento de Software / Mobile App
Aula - Modelos de Processos de Desenvolvimento de Software / Mobile App
Cloves da Rocha
 
Perfil profissional ti
Perfil profissional tiPerfil profissional ti
Perfil profissional ti
adhenawer
 
Banco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados RelacionaisBanco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados Relacionais
alexculpado
 
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraBanco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Natanael Simões
 
Android
Android Android
Android
Fábio Eliseu
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)
Rodrigo Kono
 
Aula - Metodologias Ágeis
Aula - Metodologias ÁgeisAula - Metodologias Ágeis
Aula - Metodologias Ágeis
Mauricio Cesar Santos da Purificação
 
Microsoft Power BI
Microsoft Power BIMicrosoft Power BI
Aula de SQL - Básico
Aula de SQL - BásicoAula de SQL - Básico
Aula de SQL - Básico
Airton Zanon
 
Banco de dados
Banco de dadosBanco de dados
Banco de dados
Elaine Cecília Gatto
 

Mais procurados (20)

PostgreSQL Tutorial For Beginners | Edureka
PostgreSQL Tutorial For Beginners | EdurekaPostgreSQL Tutorial For Beginners | Edureka
PostgreSQL Tutorial For Beginners | Edureka
 
Banco de Dados - Transações e Controle de Concorrência
Banco de Dados - Transações e Controle de ConcorrênciaBanco de Dados - Transações e Controle de Concorrência
Banco de Dados - Transações e Controle de Concorrência
 
Treinamento PowerBI
Treinamento  PowerBITreinamento  PowerBI
Treinamento PowerBI
 
Desenvolvimento Mobile
Desenvolvimento MobileDesenvolvimento Mobile
Desenvolvimento Mobile
 
Aula 4 - Sistemas Gerenciadores de Banco de Dados
Aula 4 - Sistemas Gerenciadores de Banco de DadosAula 4 - Sistemas Gerenciadores de Banco de Dados
Aula 4 - Sistemas Gerenciadores de Banco de Dados
 
Banco de dados orientados a objetos
Banco de dados orientados a objetos Banco de dados orientados a objetos
Banco de dados orientados a objetos
 
Sistema Operacional Android
Sistema Operacional AndroidSistema Operacional Android
Sistema Operacional Android
 
Sistemas operacionais mobile
Sistemas operacionais mobileSistemas operacionais mobile
Sistemas operacionais mobile
 
Banco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQLBanco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQL
 
Apresentação da UML
Apresentação da UMLApresentação da UML
Apresentação da UML
 
Aula - Modelos de Processos de Desenvolvimento de Software / Mobile App
Aula - Modelos de Processos de Desenvolvimento de Software / Mobile AppAula - Modelos de Processos de Desenvolvimento de Software / Mobile App
Aula - Modelos de Processos de Desenvolvimento de Software / Mobile App
 
Perfil profissional ti
Perfil profissional tiPerfil profissional ti
Perfil profissional ti
 
Banco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados RelacionaisBanco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados Relacionais
 
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraBanco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
 
Android
Android Android
Android
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)
 
Aula - Metodologias Ágeis
Aula - Metodologias ÁgeisAula - Metodologias Ágeis
Aula - Metodologias Ágeis
 
Microsoft Power BI
Microsoft Power BIMicrosoft Power BI
Microsoft Power BI
 
Aula de SQL - Básico
Aula de SQL - BásicoAula de SQL - Básico
Aula de SQL - Básico
 
Banco de dados
Banco de dadosBanco de dados
Banco de dados
 

Destaque

Conceitos E Aplicações
Conceitos E AplicaçõesConceitos E Aplicações
Conceitos E Aplicações
Fabio Telles Rodriguez
 
Postgre sql
Postgre sqlPostgre sql
Postgre sql
Adilmar Dantas
 
Novidades da versão 9.0 do PostgreSQL
Novidades da versão 9.0 do PostgreSQLNovidades da versão 9.0 do PostgreSQL
Novidades da versão 9.0 do PostgreSQL
Matheus Espanhol
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQl
Cezar Souza
 
Postgre S Q L Apresentacao U F C
Postgre S Q L Apresentacao U F CPostgre S Q L Apresentacao U F C
Postgre S Q L Apresentacao U F C
Ribamar Sousa
 
Minicurso PostgreSQL
Minicurso PostgreSQLMinicurso PostgreSQL
Minicurso PostgreSQL
Diogo Biazus
 
Postgre Sql
Postgre SqlPostgre Sql
Postgre Sql
Hudson Augusto
 
PostgreSQL: Performance Tuning
PostgreSQL: Performance TuningPostgreSQL: Performance Tuning
PostgreSQL: Performance Tuning
Fernando Ike
 
Por que PostgreSQL?
Por que PostgreSQL?Por que PostgreSQL?
Por que PostgreSQL?
Juliano Atanazio
 
Modelos de Banco de dados e SGBDS
Modelos de Banco de dados e SGBDSModelos de Banco de dados e SGBDS
Modelos de Banco de dados e SGBDS
Mahuan Capeletto Abdala
 

Destaque (10)

Conceitos E Aplicações
Conceitos E AplicaçõesConceitos E Aplicações
Conceitos E Aplicações
 
Postgre sql
Postgre sqlPostgre sql
Postgre sql
 
Novidades da versão 9.0 do PostgreSQL
Novidades da versão 9.0 do PostgreSQLNovidades da versão 9.0 do PostgreSQL
Novidades da versão 9.0 do PostgreSQL
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQl
 
Postgre S Q L Apresentacao U F C
Postgre S Q L Apresentacao U F CPostgre S Q L Apresentacao U F C
Postgre S Q L Apresentacao U F C
 
Minicurso PostgreSQL
Minicurso PostgreSQLMinicurso PostgreSQL
Minicurso PostgreSQL
 
Postgre Sql
Postgre SqlPostgre Sql
Postgre Sql
 
PostgreSQL: Performance Tuning
PostgreSQL: Performance TuningPostgreSQL: Performance Tuning
PostgreSQL: Performance Tuning
 
Por que PostgreSQL?
Por que PostgreSQL?Por que PostgreSQL?
Por que PostgreSQL?
 
Modelos de Banco de dados e SGBDS
Modelos de Banco de dados e SGBDSModelos de Banco de dados e SGBDS
Modelos de Banco de dados e SGBDS
 

Semelhante a PostgreSQL

Oficina inpe sadeck
Oficina inpe sadeckOficina inpe sadeck
Oficina inpe sadeck
Luis Sadeck
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
Marlon Munhoz
 
PostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfPostgreSQL-Prático.pdf
PostgreSQL-Prático.pdf
ArleiEvaristo
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
Ruben Marcus Luz Paschoarelli
 
Bancodedadosesgbds 140326151327-phpapp01
Bancodedadosesgbds 140326151327-phpapp01Bancodedadosesgbds 140326151327-phpapp01
Bancodedadosesgbds 140326151327-phpapp01
Sugizo Akino
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
fabio20718
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
ssuser0bad45
 
cbg_03-2014_softlivre
cbg_03-2014_softlivrecbg_03-2014_softlivre
cbg_03-2014_softlivre
Fabrícia Carla Sobral
 
Artigo de banco de dados
Artigo  de banco de dadosArtigo  de banco de dados
Artigo de banco de dados
Milena Karola De Azevedo Santos
 
Interoperabilidade Entre os Padrões ODF e OOXML
Interoperabilidade Entre os Padrões ODF e OOXMLInteroperabilidade Entre os Padrões ODF e OOXML
Interoperabilidade Entre os Padrões ODF e OOXML
Klaibson Natal Ribeiro Borges
 
Apresentação Software Livre
Apresentação Software LivreApresentação Software Livre
Apresentação Software Livre
Fabrícia Carla Sobral
 
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
CharlesAlfenasmg
 
Desenvolvendo Aplicações com Software Livre
Desenvolvendo Aplicações com Software LivreDesenvolvendo Aplicações com Software Livre
Desenvolvendo Aplicações com Software Livre
elliando dias
 
Software Livre
Software LivreSoftware Livre
Software Livre
guestdedf2
 
Mining software repositories
Mining software repositoriesMining software repositories
Mining software repositories
Rafael Rossi
 
Introdução a programação em python d3
Introdução a programação em python d3Introdução a programação em python d3
Introdução a programação em python d3
Moises de Paula
 
Geoprocessamento com Software Livre
Geoprocessamento com Software LivreGeoprocessamento com Software Livre
Geoprocessamento com Software Livre
Anderson Medeiros
 
Curso ica ato m upf passo fundo setembro 2014
Curso ica ato m upf passo fundo setembro 2014Curso ica ato m upf passo fundo setembro 2014
Curso ica ato m upf passo fundo setembro 2014
Daniel Flores
 
ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)
Flávio Lisboa
 
Introdução aos Padrões Web e Tecnologias para o Ambiente Digital - Aula 01 - ...
Introdução aos Padrões Web e Tecnologias para o Ambiente Digital - Aula 01 - ...Introdução aos Padrões Web e Tecnologias para o Ambiente Digital - Aula 01 - ...
Introdução aos Padrões Web e Tecnologias para o Ambiente Digital - Aula 01 - ...
MBA em Marketing Digital e Gestão de Projetos Web
 

Semelhante a PostgreSQL (20)

Oficina inpe sadeck
Oficina inpe sadeckOficina inpe sadeck
Oficina inpe sadeck
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
PostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfPostgreSQL-Prático.pdf
PostgreSQL-Prático.pdf
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
Bancodedadosesgbds 140326151327-phpapp01
Bancodedadosesgbds 140326151327-phpapp01Bancodedadosesgbds 140326151327-phpapp01
Bancodedadosesgbds 140326151327-phpapp01
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
 
cbg_03-2014_softlivre
cbg_03-2014_softlivrecbg_03-2014_softlivre
cbg_03-2014_softlivre
 
Artigo de banco de dados
Artigo  de banco de dadosArtigo  de banco de dados
Artigo de banco de dados
 
Interoperabilidade Entre os Padrões ODF e OOXML
Interoperabilidade Entre os Padrões ODF e OOXMLInteroperabilidade Entre os Padrões ODF e OOXML
Interoperabilidade Entre os Padrões ODF e OOXML
 
Apresentação Software Livre
Apresentação Software LivreApresentação Software Livre
Apresentação Software Livre
 
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
 
Desenvolvendo Aplicações com Software Livre
Desenvolvendo Aplicações com Software LivreDesenvolvendo Aplicações com Software Livre
Desenvolvendo Aplicações com Software Livre
 
Software Livre
Software LivreSoftware Livre
Software Livre
 
Mining software repositories
Mining software repositoriesMining software repositories
Mining software repositories
 
Introdução a programação em python d3
Introdução a programação em python d3Introdução a programação em python d3
Introdução a programação em python d3
 
Geoprocessamento com Software Livre
Geoprocessamento com Software LivreGeoprocessamento com Software Livre
Geoprocessamento com Software Livre
 
Curso ica ato m upf passo fundo setembro 2014
Curso ica ato m upf passo fundo setembro 2014Curso ica ato m upf passo fundo setembro 2014
Curso ica ato m upf passo fundo setembro 2014
 
ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)
 
Introdução aos Padrões Web e Tecnologias para o Ambiente Digital - Aula 01 - ...
Introdução aos Padrões Web e Tecnologias para o Ambiente Digital - Aula 01 - ...Introdução aos Padrões Web e Tecnologias para o Ambiente Digital - Aula 01 - ...
Introdução aos Padrões Web e Tecnologias para o Ambiente Digital - Aula 01 - ...
 

Último

História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Gabriel de Mattos Faustino
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 

Último (7)

História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 

PostgreSQL

  • 2. OPEN SOURCE Foi criado pela OSI (Open Source Initiative) e refere-se a software também 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 cópias. 4ª liberdade: A liberdade de melhorar o programa e de tornar as modificações públicas de modo que a comunidade inteira beneficie da melhoria. A realização de tais ações é reservada, pelo conceito de direito de autor, aos detentores dos direitos, que necessitam assim de permitir de forma explícita estas liberdades recorrendo a uma licença de software livre.
  • 3. LICENÇAS OPEN SOURCES Algumas licenças: General Public License (Licença Pública Geral): A GPL é a licença com maior utilização por parte de projetos de software livre, em grande parte devido à sua adoção para o projeto GNU e o sistema operacional GNU/Linux. Licença Apache é uma licença 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 licença Apache. BSD permite que o software distribuído sob a licença, seja incorporado a produtos proprietários. Trabalhos baseados no material podem até ser liberados com licença proprietária. Alguns exemplos notáveis são: o uso de código do BSD (funções de rede de computadores) em produtos da Microsoft, e o uso de muitos componentes do FreeBSD no sistema Mac OS X da Apple Computer.
  • 4. COMPARANDO LICENÇAS GPL BSD Express - Limitação ao tamanho dos dados (máximo 4Gb) - Limitação ao tamanho de memória (máximo 1Gb) Informix -No Maximo um Processador e 2 GB de memória.
  • 5. UM POUCO DA HISTORIA DO POSTGRE Após seu retorno a Berkeley, em 1985, Stonebraker começou um projeto pós- Ingres 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.  O  PostgreSQL  é  um  dos  resultados  de  uma  ampla  evolução  que  se  iniciou  com  o  projeto Ingres,  desenvolvido na Universidade de Berkeley, Califórnia.  O líder do projeto, Michael Stonebraker, um dos pioneiros dos bancos de dados  relacionais, deixou a universidade em 1982 para comercializar o Ingres, porém retornou a  ela logo em seguida. *Agência de Pesquisas em Projetos Avançados
  • 6. UM POUCO DA HISTORIA DO POSTGRE  Estas funcionalidades incluíam a habilidade de definir tipos, mas também a  habilidade  de  descrever  relações  -  as  quais  até  este  momento  eram  amplamente  utilizadas, mas completamente mantidas pelo usuário. No Postgres, o banco de dados  "compreendia"  as  relações  e  podia  obter  informações  de  tabelas  relacionadas  utilizando regras.  O principal problema era a incapacidade do modelo relacional compreender  “tipos” (atualmente, chamados de objetos), ou seja, combinações de dados simples que  formam uma única unidade.   O  projeto  resultante,  chamado  Postgres,  era  orientado  a  introduzir  a  menor  quantidade possível de funcionalidades para completar o suporte a tipos.
  • 7. UM POUCO DA HISTORIA DO POSTGRE   As  principais  características  acrescentadas  nas  versões  6.x  são  MVCC  (Multiversion Concurrency Control – Controle de Concorrência Multiversões), melhorias  no  SQL  e  novos  tipos  de  dados  nativos  (novos  tipos  de  datas  e  hora  e  tipos  geométricos).   Em  agosto  de  1996,  Marc  Fournier,  Bruce  Momjian  e  Vadim  B.  Mikheev  lançaram  a  primeira  versão  externa  da  Universidade  de  Berkeley  e  deram  início  à  tarefa de estabilizar o código herdado. Também em 1996, o projeto foi renomeado  para PostgreSQL a fim de refletir a nova linguagem de consulta ao banco de dados:  SQL. A primeira versão de PostgreSQL, a 6.0, foi liberada em janeiro de 1997. Desde  então, um grupo de desenvolvedores e de voluntários de todo o mundo, coordenados  pela Internet, têm mantido o software e desenvolvido novas funcionalidades.
  • 8. UM POUCO DA HISTORIA DO POSTGRE A versão 8.0 foi lançada 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  -  através  da  biblioteca  Cygwin).  Dentre  as  muitas  novidades  da  versão  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 lançada a versão mais recente: 8.4. Em  maio  de  2000  foi  liberada  a  versão  7.0.  As  versões  7.x  trouxeram  as  seguintes novas funcionalidades: Write-Ahead Log (WAL), esquemas SQL, outer joins,  suporte  a  IPv6,  indexação  por  texto,  suporte  melhorado  a  SSL  e  informações  estatísticas do banco de dados. Em um sistema usando WAL, todas as modificações são gravadas em um log antes de serem aplicadas. Uma das principais vantagens da utilização do WAL é um número reduzido de forma significativa de gravações em disco, pois somente o arquivo de log deve ser liberado para o disco no momento da confirmação da transação, ao invés de cada arquivo de dados alterados pela transação. Em ambientes de multiusuários, efetivação de várias transações podem ser realizadas com um único fsync do arquivo de log
  • 9. UM POUCO DA HISTORIA DO POSTGRE Administração e Segurança  •Atualização in Loco (Upgrade-in-Place) Integrada (pg_upgrade) •Autenticação RADIUS •Verificação de Força de Senha (passwordcheck) •Comandos de Gestão de Permissões de Banco de Dados Facilitados (GRANT ON ALL e DEFAULT  PERMISSIONS) Performance e Recursos Avançados  •Mensagens Assíncronas Melhoradas (LISTEN/NOTIFY) •Suporte a Windows 64-bit •Otimização para Consultas Geradas por ORM (remoção de JOIN) •Chaves Únicas para Dados não Escalares (Exclusion Constraints) •Suporte Expantido para Dados Chave-Valor (HStore) •Planos de Explain em JSON e XML O PostgreSQL 9.0 inclui ainda dezenas de outras grandes melhorias que aprimoram todos os aspectos do projeto e da performance de aplicações de bancos de dados, incluindo: suporte a windows 64 bits, gatilhos condicionais e por coluna, atualização in loco da 8.3 e 8.4, restrições de unicidade postergáveis, e mensagens assíncronas de alto desempenho
  • 10. COMO PARTICIPAR ? O PostgreSQL é um projeto open source coordenado pelo PostgreSQL Global Development Group. Embora as atividades do grupo sejam patrocinadas por diversas organizações 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 voluntários, espalhados por todo o mundo e que se comunicam via Internet. Logo, trata-se, de um projeto direcionado pela comunidade de desenvolvedores e de usuários, a qual qualquer pessoa pode se juntar, bastando se inscrever em listas de discussão e participar delas. Voluntários interessados em contribuir com o projeto também podem consultar as sugestões de tarefas de desenvolvimento de novas funções e de correções de erros que são publicadas ou apresentar suas próprias sugestões. O código desenvolvido é submetido à equipe do projeto que pode aceitá-lo e incluí-lo nas novas versões ou recusá-lo. Voluntários também podem colaborar gerando documentação ou realizando traduções!
  • 11. LICENÇA O PostgreSQL usa a licença BSD, que requer apenas que o código fonte licenciado mantenha seu direito de cópia e informação da licença. Esta licença certificada pela OSI é amplamente vista como flexível e amigável à empresas, já que ela não restringe o uso do PostgreSQL com aplicações comerciais e proprietárias. Juntamente com suporte de múltiplas empresas e propriedade pública do código, a licença BSD torna o PostgreSQL muito popular com fabricantes que querem anexar um banco de dados com seus próprios produtos sem medo de ônus financeiro, prisão à um só fabricante, ou mudanças nos termos de licenças.
  • 12. LINGUAGEM A principal linguagem de programação utilizada no desenvolvimento do PostgreSQL 8.3.0 é o ANSI C. Entretanto, também são utilizadas minoritariamente outras linguagens conforme mostra a tabela. Linguagens de Programação utilizadas no PostgreSQL 8.3.0 Linguagem Linhas de código % 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
  • 13. LIMITES DO POSTGRES • Tamanho Máximo do Banco de Dados • Tamanho máximo de uma Tabela • Tamanho Máximo de uma Linha • Tamanho Máximo de um Campo • Máximo de Linhas por Tabela • Máximo de Colunas por Tabela • Máximo de Índices por Tabela Ilimitado 32 TB 1.6 TB 1 GB Ilimitado 250–1600 dependendo do tipo de coluna Ilimitado
  • 14. ESTADO ATUAL Além de doações, o projeto PostgreSQL se sustenta pelo patrocínio de diversas empresas, entre as quais se destacam: Fujitsu, Hub.Org, NTT Group, Red Hat, Skype, SRA e Sun Microsystems. O software tem adquirido prestígio na comunidade Linux, tendo recebido diversas vezes o prêmio Linux Journal Editor's Choice de melhor sistema de gerenciamento de banco de dados (SGBD). A aceitação do PostgreSQL tem se ampliado para além da comunidade de código aberto. Há entre os seus usuários grandes empresas internacionais, órgãos governamentais de vários países e universidades de prestígio mundial. Existe uma lista dos principais usuários no Brasil e no mundo e, também, há alguns estudos de caso de aplicações que utilizam o PostgreSQL.
  • 15. CASOS DE SUCESSO Empresa química alemã e uma das maiores empresas do mundo. No Brasil é também proprietária da empresa Suvinil, líder no mercado interno de tintas. A BASF está presente em todos os países da América do Sul, com exceção das Guianas e Suriname. Beneficio do uso de PostGreSQL: • Redução de custo: A combinação de PostGreSQL e software livre resultou na redução de custo Software/Hardware em 67 %. • Alta customização: maior confiabilidade e métricas de desempenho, resultando em uma experiência melhor para o usuário. • Aumento da receita potencial: Embora seja cedo para dizer o quanto as receitas do produto têm gerado diretamente, é claro que a receita projetada é significativa.
  • 16. A Caixa precisava modernizar seu sistema de auto-atendimento e decidiu pela substituição dos sistemas existentes. Este novo ambiente ganhou o nome de Multicanal. A 4Linux utilizou neste projeto os seguintes Softwares Livres: • Sistema operacional : Linux - distribuição Debian • Servidor de Aplicações Java : Jboss • Banco de Dados : PostgreSQL Durante os testes, a solução baseada em Software Livre construída pela 4Linux se mostrou com a melhor relação custo por transação 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 transações bancárias e sociais por dia, com mais de 18.000.000 de transações de banco de dados por dia. Passam pelo multicanal mais de R$ 1 bilhão por mês. CASOS DE SUCESSO
  • 17. CARACTERÍSTICAS • Licenciamento BSD. Esta licença garante total liberdade de uso, alteração, modificação e distribuição do sistema. Ela também permite, inclusive, que versões proprietárias 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 evoluíram 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 criação do módulo PostGIS, contendo inúmeras funcionalidades para o desenvolvimento de aplicações que tratam a geoinformação. • Inúmeras interfaces nativas. O PostgreSQL pode ser acessado através 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 várias plataformas (BSD, Linux, Windows, mac, etc.) • Robusto: criado para suportar grande volume de dados e transações concorrentes (Existem sistemas ativos com o PostgreSQL em ambiente de produção que gerenciam mais de 4TB de dados); • Funções em SQL, C, C++ , PLpg/SQL, PL/Perl, PL/Python, PL/TCL suportadas nativamente além de PL/Java, PL/PHP, PL/R, PL/Ruby, PL/sh, PL/Mono.
  • 18. TOTALMENTE ACID • Tudo é transação; • Garanti que a base de dados irá guardar o conjunto de modificações pendentes de uma forma que o sistema pode recuperá-las depois de um término anormal. • comandos de controle de transação: • BEGIN; • COMMIT; • ROLLBACK; •START TRANSACTION; •SAVEPOINT; •SET TRANSACTION; ACID (acrônimo de Atomicidade, Consistência, Isolamento e Durabilidade) Atomicidade - uma transação é totalmente executada ou totalmente revertida sem deixar efeitos no banco de dados Consistência - os resultados são coerentes com as operações realizadas Isolamento - a execução de uma transação não interfere ou sofre interferência em relação às demais transações em execução Durabilidade - o resultado das transações deve ser persistido fisicamente no banco de dados.
  • 19. ADMINISTRAÇÃO SERVIDOR • Rotina de Limpeza: Na operação normal do PostgreSQL, um comando UPDATE ou DELETE em uma linha não remove imediatamente a versão antiga da linha. Esta abordagem é necessária para obter os benefícios do controle de simultaneidade multi-versão a versão da linha não pode ser removida enquanto houver possibilidade de ser acessada por outras transações. Mas no final, uma versão de linha desatualizada ou excluída não terá mais interesse para nenhuma transação. O espaço ocupado deve ser recuperado para ser reutilizado pelas novas linhas, evitando um crescimento sem fim da necessidade de espaço em disco. Isto é feito executando o comando VACUUM.
  • 20. Arquitetura do PostGres CLIENTE Aplicação Cliente Conector PostGre SERVIDOR postmaster (daemon) postgre (backen d) postgre (backen d) postgre (backen d) Fork Conexão inicial e autenticação Comunicação (Queries, resultados, etc) BD Físico Tabelas Buffer Kerne l buffe r Disco
  • 21. ARQUITETURA DO POSTGRESQL No jargão de banco de dados, o PostgreSQL utiliza o modelo cliente-servidor. Uma sessão do PostgreSQL consiste nos seguintes processos:  Postmaster um processo servidor, que gerencia os arquivos de banco de dados, recebe conexões dos aplicativos cliente com o banco de dados, e executa ações no banco de dados em nome dos clientes.  Cliente pode ser uma ferramenta no modo caractere, um aplicativo gráfico, um servidor Web que acessa o banco de dados para mostrar páginas Web, ou uma ferramenta especializada para manutenção do banco de dados.  O servidor PostgreSQL pode tratar várias conexões simultâneas de clientes. Para esta finalidade é iniciado um novo processo (fork) para cada conexão. Deste ponto em diante, o cliente e o novo processo servidor se comunicam sem intervenção do processo postmaster original. Portanto, o postmaster está sempre executando aguardando por novas conexões dos clientes.  Chamada de Sistema (Fork), Para criar um novo processo, o processo copia a si próprio através da chamada de sistema fork. O fork cria uma cópia do processo original que é em grande parte idêntica à ancestral. O novo processo possui um PID (identificador de processo) próprio, e suas próprias informações de contabilização.
  • 22. ALGUMAS VANTAGENS O PostgreSQL é um banco maduro, com um histórico de desenvolvimento iniciado em 1977. Tem as principais características desejadas em um banco de dados:  Recuperação automática após crash de sistema (WAL);  MVCC (controle de concorrência de multi-versão). Neste mecanismo, processos de leitura não bloqueiam processos de escrita e vice-versa, reduzindo drasticamente (às vezes,eliminando) a contenção entre transações concorrentes e paralisação parcial ou completa (deadlock);  Logging de transações;  Commit / Rollback / Checkpoints;  Triggers / Stored Procedures;  Constraints / Foreign Keys; Backup On-line;
  • 23. ALGUMAS VANTAGENS Algumas mudanças da versão mais recente Replicação e Escalabilidade: Hot Standby, Replicação em Fluxo Administração e Segurança: Atualização in Loco (Upgrade-in-Place) Integrada (pg_upgrade), Autenticação RADIUS, Verificação de Força de Senha (passwordcheck) Comandos de Gestão de Permissões de Banco de Dados Facilitados (GRANT ON ALL e DEFAULT PERMISSIONS) Projeto de Bancos de Dados e SQL: Restrições de Unicidade Postergáveis, Gatilhos Condicionais. Gatilhos por Colunas, Ordenamento em Agregações, Novas "Windowing Functions" (RANGE PRECEEDING e FOLLOWING). Funções Armazenadas (Stored Procedures): Blocos de Código de Procedimento Anônimos (comando DO), Melhorias nas Funções Armazenadas em Perl e Python (incluindo suporte ao Python 3), Chamadas com Parâmetros Nomeados Performance e Recursos Avançados: Mensagens Assíncronas Melhoradas (LISTEN/NOTIFY), Suporte a Windows 64-bit, Otimização para Consultas Geradas por ORM (remoção de JOIN), Chaves Únicas para Dados não Escalares (Exclusion Constraints), Suporte Expantido para Dados Chave-Valor (HStore), Planos de Explain em JSON e XML
  • 24. PGAccess: esta é a interface gráfica para usuário (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 versão totalmente em português. Funciona muito bem, tem muitas funcionalidades e é código livre. PGAdmin III: uma interface completa de administração do PostgreSQL, praticamente o cliente oficial. OpenOffice.org: o OpenOffice.org 2 traz o aplicativo Base que via JDBC permite uma manipulação bem avançada de bases de dados possibilitando o desenvolvimento de formulários e relatórios bem complexos. Xpg: interface de administração 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 relatórios em HTML. Porém tem algumas limitações, algumas funções como criação de índices não podem ser feitas visualmente. É de código livre e tem um instalador RPM. FERRAMENTAS
  • 25. BACKUP, EVITANDO DESASTRES Dump • Realiza dump consistente com o banco de dados on-line sem bloquear usuários • Podem ser selecionados parte dos objetos na exportação ou importação como permissões, dados, esquemas, etc. • um dump pode ser exportado ou compactado diretamente para outro banco utilizando pipe! Método SQL-dump : A idéia por trás do Método 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 utilitário pg_dump para esta finalidade. (o pg_dump não bloqueia outras operações no banco enquanto ta executando).
  • 26. BACKUP, EVITANDO DESASTRES Cópia de segurança no nível de sistema de arquivo: Uma estratégia alternativa para fazer cópia de segurança, é 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 cópia como na hora re restaurar). Cópia de segurança em-linha: Durante todo o tempo, o PostgreSQL mantém o registro de escrita prévia (WAL = write ahead log) no subdiretório pg_xlog do diretório de dados do agrupamento. O WAL contém todas as alterações realizadas nos arquivos de dados do banco de dados. O WAL existe, principalmente, com a finalidade de fornecer segurança 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 necessário fazer a recuperação, pode ser feita a recuperação da cópia de segurança do banco de dados no nível de sistema de arquivos e, depois, refeitas as alterações a partir da cópia dos arquivos de segmento do WAL, para trazer a restauração para o tempo presente.
  • 27. CRIANDO O BANCO DE DADOS CREATE DATABASE nome_do_banco OWNER dono_do_banco TEMPLATE template ENCODING codificação TABLESPACE tablespace OWNER Normalmente, o criador se torna o dono do novo banco de dados. Os superusuários podem criar bancos de dados cujos donos são outros usuários utilizando a cláusula; TEMPLATE Por padrão, 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 Codificação do conjunto de caracteres a ser utilizado no novo banco de dados; TABLESPACE O nome do espaço de tabelas associado ao novo banco de dados, ou DEFAULT para utilizar o espaço de tabelas do banco de dados modelo;
  • 28. CONCEITO DE SCHEMAS NO POSTGRESQL A partir da versão 7.3, o PostgreSQL iniciou o suporte a Schema, no qual é possível criar um espaço lógico (namespace) dentro do banco de dados para armazenar os objetos: Dados, tabelas, funções, etc. CREATE SCHEMA nome_do_esquema AUTHORIZATION nome_do_usuário Ou CREATE SCHEMA AUTHORIZATION nome_do_usuário Obs: Se for omitido, o nome do usuário será usado como o nome do esquema. AUTHORIZATION Possibilita a criação de um schema para outro usuário.  Um usuário pode ter vários schemas;  Um banco de dados pode ter vários schemas;
  • 29. CRIANDO TABELAS CREATE TABLE nome_do_schema.nome_da_tabela ( nome_da_coluna tipo_de_dado [restrição_de_coluna] ) INHERITS (tabela_ancestral) TABLESPACE espaço_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 Domínio: Baseia em um determinado tipo base, porém tem restrições limitando os valores válidos.
  • 30. RESTRIÇÃO DE COLUNA E RESTRIÇÃO DE TABELA 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 ); FOREIGN KEY CREATE TABLE pedidos ( cod_pedido integer PRIMARY KEY, cod_prod integer REFERENCES produtos (cod_prod), quantidade integer ); 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) ); CREATE TABLE pedidos ( cod_pedido integer PRIMARY KEY, cod_prod integer, quantidade integer, CONSTRAINT FK_prod FOREIGN KEY (cod_prod) REFERENCES produto(cod_prod) ); RESTRIÇÃO DE COLUNA RESTRIÇÃO DE TABELA
  • 31. SEQUENCE E AUTO-INCREMENTO CREATE SEQUENCE nome INCREMENT BY incremento MINVALUE valor_mínimo MAXVALUE valor_máximo START WITH início Ver estado atual da sequence: SELECT * FROM nome_da_sequence; Selecionar o próximo valor desta seqüência: SELECT nextval(‘nome_da_sequence'); Utilizar esta seqüência no comando INSERT: INSERT INTO distribuidores VALUES (nextval('serial'), 'nada'); Obs.: No Oracle nextval e currval são pseudocolunas e não funções.
  • 32. 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 não são tipos verdadeiros, mas meramente uma notação 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;
  • 33. 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 modificações de esquema nas tabelas ancestrais normalmente se propagam para as tabelas descendentes. Exemplo: CREATE TABLE tabelaPai ( id serial PRIMARY KEY, nome varchar(40) ) CREATE TABLE tabelaFilho( sobrenome varchar(40) )INHERITS(tabelaPai) Dois inserts na tabela filho: 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:
  • 34.
  • 35. PL/pgSQL é uma linguagem procedural carregável 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 carregável que pudesse: • ser utilizada para criar procedimentos de funções e de gatilhos; • adicionar estruturas de controle à linguagem SQL; • realizar processamentos complexos; • herdar todos os tipos de dado, funções e operadores definidos pelo usuário; • ser definida como confiável pelo servidor; • ser fácil de utilizar. INTRODUÇÃO
  • 36. CREATE OR REPLACE FUNCTION NOME_DA_FUNÇÃO ( Variavel TIPO, ) RETURNS TIPO AS $$ DECLARE Variavel TIPO; BEGIN instruções RETURN; EXCEPTION WHEN tipo_da_excessão THEN instruções_do_tratador RETURN ; END; $$ LANGUAGE plpgsql; ESTRUTURA DE UMA FUNÇÃO EM PL/PGSQL Só possui parâmetros IN. Delimitador Definição da Linguagem
  • 37. TIPOS EM PL/PGSQL • Copiando Tipo: tabela.coluna%TYPE; • Tipo de Linha: tabela%ROWTYPE; • Tipo Registro: As variáveis registro são semelhantes às variáveis tipo- linha, mas não possuem uma estrutura pré-definida. Declaração: 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, é possível definir um cursor encapsulando a consulta e, depois, ler umas poucas linhas do resultado da consulta de cada vez. Declaração: curs1 refcursor; curs2 CURSOR FOR SELECT * FROM tenk1;
  • 38. Domínios são úteis para abstrair campos comuns entre tabelas em um único local para manutenção. Por exemplo, uma coluna de endereço de correio eletrônico pode ser usada em várias tabelas, todas com as mesmas propriedades. Em vez de definir as restrições em cada tabela individualmente, deve ser definido e utilizado um domínio. CREATE DOMAIN nome_do_dominio AS tipo CHECK( condição) DOMÍNIO
  • 39. DOMÍNIO Exemplo: --Criação da função 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'); //Inserção ok! INSERT INTO pessoa2(nome,sangue) VALUES ('Sheldon','y');
  • 40. REFERÊNCIAS BIBLIOGRÁFICAS Documentação Oficial Traduzida: http://wiki.postgresql.org.br/Documenta%C3%A7%C3%A3o?action=AttachFile&do=get&target=manual_pg.pdf.zip