SlideShare uma empresa Scribd logo
características 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 código aberto.
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 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],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.
COMO PARTICIPAR ? 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 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],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.
QUEM USA POSTGRE ? U.S. State Department
CASOS DE SUCESSO O Detran do Ceará economizou R$ 1,7 milhão com banco de dados livre. A decisão do governo cearense de substituir a solução de banco de dados da Oracle pelo PostgreSQL fez com que o Detran economizasse gastos com pagamento de licenças e serviço de suporte técnico. O Detran tinha a seguinte arquitetura: um servidor de aplicação ligado a um servidor Oracle. Era nesta situação que as 1.287 tabelas e 426 views do banco se encontravam. Gastava-se muito dinheiro com o pagamento de licenças 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 diárias de manutenção e desenvolvimento de novas ferramentas para o órgão. Além disso, a base de dados era muito complexa e utilizava muitos recursos que até então estavam disponíveis apenas no Oracle. Outro fator negativo foi que poucos técnicos tinham conhecimento em PostgreSQL. Como é a arquitetura do banco hoje? Agora o servidor de aplicação é ligado diretamente a um balanceador de carga, que é ligado a dois servidores do banco de dados. Além da economia com as licenças, quais outros resultados positivos a nova arquitetura trouxe? As consultas ficaram mais rápidas. Tem uma que levava 2 horas e, depois da migração, passou a ser realizada em 6 minutos. Na primeira vez, o responsável do Detran não acreditou e acabamos gastando as 2 horas tentando convencer que a consulta tinha sido mesmo realizada em 6 minutos.
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: ,[object Object],[object Object],[object Object]
CASOS DE SUCESSO 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. ,[object Object],[object Object],[object Object],[object Object],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 .
CARACTERÍSTICAS ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TOTALMENTE ACID ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],ACID  (acrônimo de  A tomicidade,  C onsistência,  I solamento e  D urabilidade) A tomicidade  - uma transação é totalmente executada ou totalmente revertida sem deixar efeitos no banco de dados C onsistência  - os resultados são coerentes com as operações realizadas I solamento  - a execução de uma transação não interfere ou sofre interferência em relação às demais transações em execução D urabilidade  - o resultado das transações deve ser persistido fisicamente no banco de dados.
ADMINISTRAÇÃO SERVIDOR ,[object Object]
Arquitetura do PostGres Aplicação Cliente Conector PostGre postmaster (daemon) postgre (backend) postgre (backend) postgre (backend) Fork Conexão inicial e autenticação Comunicação (Queries, resultados, etc) Kernel buffer Disco CLIENTE SERVIDOR BD Físico Tabelas Buffer
ARQUITETURA DO POSTGRESQL ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
ALGUMAS VANTAGENS ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
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
FERRAMENTAS
BACKUP, EVITANDO DESASTRES ,[object Object],[object Object],[object Object],[object Object]
BACKUP, EVITANDO DESASTRES 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). 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.
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   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 . ,[object Object],[object Object],[object Object]
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 ,[object Object],[object Object],[object Object],[object Object]
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:
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. Problema com o
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) ) INSERT INTO  pessoa (endereco)  VALUES  ( ROW('Street Sand',69) ) Coluna única é obrigado usar “ROW”
 
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 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
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');
Em que situação o PostGreSQL deve ser usado ?
O que andam falando do PostGreSQL ? ,[object Object],[object Object],[object Object],[object Object]
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
Fim

Mais conteúdo relacionado

Mais procurados

Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
Rangel Javier
 
Aula 1 - Introdução ao Mobile
Aula 1 - Introdução ao MobileAula 1 - Introdução ao Mobile
Aula 1 - Introdução ao Mobile
Cloves da Rocha
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
Elaine Cecília Gatto
 
Banco De Dados
Banco De DadosBanco De Dados
Banco De Dados
Robson Silva Espig
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
Daniel Brandão
 
1.Introdução Banco de Dados
1.Introdução Banco de Dados1.Introdução Banco de Dados
1.Introdução Banco de Dados
vini_campos
 
Respostas exercício 1 bdi
Respostas exercício 1   bdiRespostas exercício 1   bdi
Respostas exercício 1 bdi
Patty Muniz
 
Metodologia Ágil
Metodologia ÁgilMetodologia Ágil
Metodologia Ágil
Elaine Cecília Gatto
 
Engenharia Requisitos - Aula4 06 03 2006
Engenharia Requisitos - Aula4 06 03 2006Engenharia Requisitos - Aula4 06 03 2006
Engenharia Requisitos - Aula4 06 03 2006
Luís Fernando Richter
 
Engenharia de software - Prototipo
Engenharia de software - PrototipoEngenharia de software - Prototipo
Engenharia de software - Prototipo
Danielle Alves Gonçalves
 
Banco de Dados II Aula Prática 1 (Conversão do modelo conceitual para modelo ...
Banco de Dados II Aula Prática 1 (Conversão do modelo conceitual para modelo ...Banco de Dados II Aula Prática 1 (Conversão do modelo conceitual para modelo ...
Banco de Dados II Aula Prática 1 (Conversão do modelo conceitual para modelo ...
Leinylson Fontinele
 
SOA - Arquitetura Orientada a Serviços
SOA - Arquitetura Orientada a ServiçosSOA - Arquitetura Orientada a Serviços
SOA - Arquitetura Orientada a Serviços
alinebicudo
 
Banco de Dados
Banco de DadosBanco de Dados
Banco de Dados
Daniel Paz de Araújo
 
Aula 1
Aula 1Aula 1
Apostila de Banco de Dados
Apostila de Banco de Dados Apostila de Banco de Dados
Apostila de Banco de Dados
info_cimol
 
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
 
Bancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geralBancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geral
Fhabiana Thieli Machado
 
Banco de Dados II Aula 02 - Modelagem de Dados (Definição, Modelo conceitual)
Banco de Dados II  Aula 02 - Modelagem de Dados (Definição, Modelo conceitual)Banco de Dados II  Aula 02 - Modelagem de Dados (Definição, Modelo conceitual)
Banco de Dados II Aula 02 - Modelagem de Dados (Definição, Modelo conceitual)
Leinylson Fontinele
 
Banco de Dados - NoSQL
Banco de Dados - NoSQLBanco de Dados - NoSQL
Banco de Dados - NoSQL
Marcos Luiz Lins Filho
 
Análise e Projeto de Sistemas
Análise e Projeto de SistemasAnálise e Projeto de Sistemas
Análise e Projeto de Sistemas
Guilherme
 

Mais procurados (20)

Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
 
Aula 1 - Introdução ao Mobile
Aula 1 - Introdução ao MobileAula 1 - Introdução ao Mobile
Aula 1 - Introdução ao Mobile
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
 
Banco De Dados
Banco De DadosBanco De Dados
Banco De Dados
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
1.Introdução Banco de Dados
1.Introdução Banco de Dados1.Introdução Banco de Dados
1.Introdução Banco de Dados
 
Respostas exercício 1 bdi
Respostas exercício 1   bdiRespostas exercício 1   bdi
Respostas exercício 1 bdi
 
Metodologia Ágil
Metodologia ÁgilMetodologia Ágil
Metodologia Ágil
 
Engenharia Requisitos - Aula4 06 03 2006
Engenharia Requisitos - Aula4 06 03 2006Engenharia Requisitos - Aula4 06 03 2006
Engenharia Requisitos - Aula4 06 03 2006
 
Engenharia de software - Prototipo
Engenharia de software - PrototipoEngenharia de software - Prototipo
Engenharia de software - Prototipo
 
Banco de Dados II Aula Prática 1 (Conversão do modelo conceitual para modelo ...
Banco de Dados II Aula Prática 1 (Conversão do modelo conceitual para modelo ...Banco de Dados II Aula Prática 1 (Conversão do modelo conceitual para modelo ...
Banco de Dados II Aula Prática 1 (Conversão do modelo conceitual para modelo ...
 
SOA - Arquitetura Orientada a Serviços
SOA - Arquitetura Orientada a ServiçosSOA - Arquitetura Orientada a Serviços
SOA - Arquitetura Orientada a Serviços
 
Banco de Dados
Banco de DadosBanco de Dados
Banco de Dados
 
Aula 1
Aula 1Aula 1
Aula 1
 
Apostila de Banco de Dados
Apostila de Banco de Dados Apostila de Banco de Dados
Apostila de Banco de Dados
 
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
 
Bancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geralBancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geral
 
Banco de Dados II Aula 02 - Modelagem de Dados (Definição, Modelo conceitual)
Banco de Dados II  Aula 02 - Modelagem de Dados (Definição, Modelo conceitual)Banco de Dados II  Aula 02 - Modelagem de Dados (Definição, Modelo conceitual)
Banco de Dados II Aula 02 - Modelagem de Dados (Definição, Modelo conceitual)
 
Banco de Dados - NoSQL
Banco de Dados - NoSQLBanco de Dados - NoSQL
Banco de Dados - NoSQL
 
Análise e Projeto de Sistemas
Análise e Projeto de SistemasAnálise e Projeto de Sistemas
Análise e Projeto de Sistemas
 

Destaque

Curso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosCurso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos Comandos
Marcos Thomaz
 
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
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
brobelo
 
PostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados UniversoPostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados Universo
elliando dias
 
Criação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQLCriação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQL
Marcos Thomaz
 
Full Text Search - Busca Textual no PostgreSQL
Full Text Search -  Busca Textual no PostgreSQLFull Text Search -  Busca Textual no PostgreSQL
Full Text Search - Busca Textual no PostgreSQL
Juliano Atanazio
 
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
 
Por que PostgreSQL?
Por que PostgreSQL?Por que PostgreSQL?
Por que PostgreSQL?
Juliano Atanazio
 
Exercícios PL/SQL
Exercícios PL/SQLExercícios PL/SQL
Exercícios PL/SQL
fernandomandarini
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
Oto Tumax
 
MySQL e Oracle para Desenvolvedores
MySQL e Oracle para DesenvolvedoresMySQL e Oracle para Desenvolvedores
MySQL e Oracle para Desenvolvedores
Airton Lastori
 
Netemul
NetemulNetemul
Se meu elefante falasse
Se meu elefante falasseSe meu elefante falasse
Se meu elefante falasse
Dickson S. Guedes
 
Gerenciamento de Performance
Gerenciamento de PerformanceGerenciamento de Performance
Gerenciamento de Performance
Adeildo Caboclo
 
Apostila de postgre
Apostila de postgreApostila de postgre
Apostila de postgre
ms6675
 
Arquivos No Banco
Arquivos No BancoArquivos No Banco
Arquivos No Banco
Diogo Biazus
 
Arquitetura Cliente-Servidor - Banco de dados
Arquitetura Cliente-Servidor - Banco de dadosArquitetura Cliente-Servidor - Banco de dados
Arquitetura Cliente-Servidor - Banco de dados
Israel Messias
 
Apresentação Oracle SGBD
Apresentação Oracle SGBDApresentação Oracle SGBD
Apresentação Oracle SGBD
Denis Vieira
 
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
 

Destaque (20)

Curso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosCurso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos Comandos
 
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
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
PostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados UniversoPostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados Universo
 
Criação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQLCriação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQL
 
Full Text Search - Busca Textual no PostgreSQL
Full Text Search -  Busca Textual no PostgreSQLFull Text Search -  Busca Textual no PostgreSQL
Full Text Search - Busca Textual no 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
 
Por que PostgreSQL?
Por que PostgreSQL?Por que PostgreSQL?
Por que PostgreSQL?
 
Exercícios PL/SQL
Exercícios PL/SQLExercícios PL/SQL
Exercícios PL/SQL
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
MySQL e Oracle para Desenvolvedores
MySQL e Oracle para DesenvolvedoresMySQL e Oracle para Desenvolvedores
MySQL e Oracle para Desenvolvedores
 
Netemul
NetemulNetemul
Netemul
 
Se meu elefante falasse
Se meu elefante falasseSe meu elefante falasse
Se meu elefante falasse
 
Gerenciamento de Performance
Gerenciamento de PerformanceGerenciamento de Performance
Gerenciamento de Performance
 
Apostila de postgre
Apostila de postgreApostila de postgre
Apostila de postgre
 
Arquivos No Banco
Arquivos No BancoArquivos No Banco
Arquivos No Banco
 
Arquitetura Cliente-Servidor - Banco de dados
Arquitetura Cliente-Servidor - Banco de dadosArquitetura Cliente-Servidor - Banco de dados
Arquitetura Cliente-Servidor - Banco de dados
 
Apresentação Oracle SGBD
Apresentação Oracle SGBDApresentação Oracle SGBD
Apresentação Oracle SGBD
 
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
 

Semelhante a PostgreSQL

PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
Ysmaylyka Macedo
 
Oficina inpe sadeck
Oficina inpe sadeckOficina inpe sadeck
Oficina inpe sadeck
Luis Sadeck
 
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
 
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
 
Cent-OS - Sistema Operacional
Cent-OS - Sistema OperacionalCent-OS - Sistema Operacional
Cent-OS - Sistema Operacional
Anderson Favaro
 
ConheçA O Apache 2.0 Parte 2
ConheçA O Apache 2.0   Parte 2ConheçA O Apache 2.0   Parte 2
ConheçA O Apache 2.0 Parte 2
Felipe Santos
 
Bancodedadosesgbds 140326151327-phpapp01
Bancodedadosesgbds 140326151327-phpapp01Bancodedadosesgbds 140326151327-phpapp01
Bancodedadosesgbds 140326151327-phpapp01
Sugizo Akino
 
PostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfPostgreSQL-Prático.pdf
PostgreSQL-Prático.pdf
ArleiEvaristo
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
fabio20718
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
ssuser0bad45
 
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
 
snto
sntosnto
Instalando e usando a XPages Extension Library para IBM Designer - extlib (Po...
Instalando e usando a XPages Extension Library para IBM Designer - extlib (Po...Instalando e usando a XPages Extension Library para IBM Designer - extlib (Po...
Instalando e usando a XPages Extension Library para IBM Designer - extlib (Po...
Bruno Grange
 
Infra de provedores de serviço com software livre
Infra de provedores de serviço com software livreInfra de provedores de serviço com software livre
Infra de provedores de serviço com software livre
Isaque Profeta
 
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
 
Artigo: Aplicando recomendações de segurança na instalação do Zabbix
Artigo: Aplicando recomendações de segurança na instalação do ZabbixArtigo: Aplicando recomendações de segurança na instalação do Zabbix
Artigo: Aplicando recomendações de segurança na instalação do Zabbix
Aécio Pires
 
Documento SpagoBI
Documento SpagoBIDocumento SpagoBI
Documento SpagoBI
Grendene S/A
 
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
 
tutorial nagios
tutorial nagiostutorial nagios
tutorial nagios
André Luiz Cunha
 
Desenvolvimento Web em ambiente de software livre
Desenvolvimento Web em ambiente de software livreDesenvolvimento Web em ambiente de software livre
Desenvolvimento Web em ambiente de software livre
Pedro Neto
 

Semelhante a PostgreSQL (20)

PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
Oficina inpe sadeck
Oficina inpe sadeckOficina inpe sadeck
Oficina inpe sadeck
 
Desenvolvendo Aplicações com Software Livre
Desenvolvendo Aplicações com Software LivreDesenvolvendo Aplicações com Software Livre
Desenvolvendo Aplicações com Software Livre
 
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
 
Cent-OS - Sistema Operacional
Cent-OS - Sistema OperacionalCent-OS - Sistema Operacional
Cent-OS - Sistema Operacional
 
ConheçA O Apache 2.0 Parte 2
ConheçA O Apache 2.0   Parte 2ConheçA O Apache 2.0   Parte 2
ConheçA O Apache 2.0 Parte 2
 
Bancodedadosesgbds 140326151327-phpapp01
Bancodedadosesgbds 140326151327-phpapp01Bancodedadosesgbds 140326151327-phpapp01
Bancodedadosesgbds 140326151327-phpapp01
 
PostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfPostgreSQL-Prático.pdf
PostgreSQL-Prático.pdf
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
 
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
 
snto
sntosnto
snto
 
Instalando e usando a XPages Extension Library para IBM Designer - extlib (Po...
Instalando e usando a XPages Extension Library para IBM Designer - extlib (Po...Instalando e usando a XPages Extension Library para IBM Designer - extlib (Po...
Instalando e usando a XPages Extension Library para IBM Designer - extlib (Po...
 
Infra de provedores de serviço com software livre
Infra de provedores de serviço com software livreInfra de provedores de serviço com software livre
Infra de provedores de serviço com 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
 
Artigo: Aplicando recomendações de segurança na instalação do Zabbix
Artigo: Aplicando recomendações de segurança na instalação do ZabbixArtigo: Aplicando recomendações de segurança na instalação do Zabbix
Artigo: Aplicando recomendações de segurança na instalação do Zabbix
 
Documento SpagoBI
Documento SpagoBIDocumento SpagoBI
Documento SpagoBI
 
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
 
tutorial nagios
tutorial nagiostutorial nagios
tutorial nagios
 
Desenvolvimento Web em ambiente de software livre
Desenvolvimento Web em ambiente de software livreDesenvolvimento Web em ambiente de software livre
Desenvolvimento Web em ambiente de software livre
 

Último

1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf
1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf
1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf
SILVIAREGINANAZARECA
 
Educação trabalho HQ em sala de aula uma excelente ideia
Educação  trabalho HQ em sala de aula uma excelente  ideiaEducação  trabalho HQ em sala de aula uma excelente  ideia
Educação trabalho HQ em sala de aula uma excelente ideia
joseanesouza36
 
Leis de Mendel - as ervilhas e a maneira simples de entender.ppt
Leis de Mendel - as ervilhas e a maneira simples de entender.pptLeis de Mendel - as ervilhas e a maneira simples de entender.ppt
Leis de Mendel - as ervilhas e a maneira simples de entender.ppt
PatriciaZanoli
 
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
MessiasMarianoG
 
Funções e Progressões - Livro completo prisma
Funções e Progressões - Livro completo prismaFunções e Progressões - Livro completo prisma
Funções e Progressões - Livro completo prisma
djincognito
 
Livro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo FreireLivro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo Freire
WelberMerlinCardoso
 
Aula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptxAula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptx
LILIANPRESTESSCUDELE
 
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdfUFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
Manuais Formação
 
Fernão Lopes. pptx
Fernão Lopes.                       pptxFernão Lopes.                       pptx
Fernão Lopes. pptx
TomasSousa7
 
Atividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º anoAtividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º ano
fernandacosta37763
 
Potenciação e Radiciação de Números Racionais
Potenciação e Radiciação de Números RacionaisPotenciação e Radiciação de Números Racionais
Potenciação e Radiciação de Números Racionais
wagnermorais28
 
Vogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantilVogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantil
mamaeieby
 
Atividade letra da música - Espalhe Amor, Anavitória.
Atividade letra da música - Espalhe  Amor, Anavitória.Atividade letra da música - Espalhe  Amor, Anavitória.
Atividade letra da música - Espalhe Amor, Anavitória.
Mary Alvarenga
 
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - AlfabetinhoAtividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
MateusTavares54
 
PowerPoint Newton gostava de Ler - Saber em Gel.pdf
PowerPoint Newton gostava de Ler - Saber em Gel.pdfPowerPoint Newton gostava de Ler - Saber em Gel.pdf
PowerPoint Newton gostava de Ler - Saber em Gel.pdf
1000a
 
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
LucianaCristina58
 
OS elementos de uma boa Redação para o ENEM.pdf
OS elementos de uma boa Redação para o ENEM.pdfOS elementos de uma boa Redação para o ENEM.pdf
OS elementos de uma boa Redação para o ENEM.pdf
AmiltonAparecido1
 
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdfCRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
soaresdesouzaamanda8
 
Rimas, Luís Vaz de Camões. pptx
Rimas, Luís Vaz de Camões.          pptxRimas, Luís Vaz de Camões.          pptx
Rimas, Luís Vaz de Camões. pptx
TomasSousa7
 
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptxAVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AntonioVieira539017
 

Último (20)

1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf
1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf
1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf
 
Educação trabalho HQ em sala de aula uma excelente ideia
Educação  trabalho HQ em sala de aula uma excelente  ideiaEducação  trabalho HQ em sala de aula uma excelente  ideia
Educação trabalho HQ em sala de aula uma excelente ideia
 
Leis de Mendel - as ervilhas e a maneira simples de entender.ppt
Leis de Mendel - as ervilhas e a maneira simples de entender.pptLeis de Mendel - as ervilhas e a maneira simples de entender.ppt
Leis de Mendel - as ervilhas e a maneira simples de entender.ppt
 
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
 
Funções e Progressões - Livro completo prisma
Funções e Progressões - Livro completo prismaFunções e Progressões - Livro completo prisma
Funções e Progressões - Livro completo prisma
 
Livro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo FreireLivro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo Freire
 
Aula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptxAula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptx
 
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdfUFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
 
Fernão Lopes. pptx
Fernão Lopes.                       pptxFernão Lopes.                       pptx
Fernão Lopes. pptx
 
Atividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º anoAtividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º ano
 
Potenciação e Radiciação de Números Racionais
Potenciação e Radiciação de Números RacionaisPotenciação e Radiciação de Números Racionais
Potenciação e Radiciação de Números Racionais
 
Vogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantilVogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantil
 
Atividade letra da música - Espalhe Amor, Anavitória.
Atividade letra da música - Espalhe  Amor, Anavitória.Atividade letra da música - Espalhe  Amor, Anavitória.
Atividade letra da música - Espalhe Amor, Anavitória.
 
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - AlfabetinhoAtividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
 
PowerPoint Newton gostava de Ler - Saber em Gel.pdf
PowerPoint Newton gostava de Ler - Saber em Gel.pdfPowerPoint Newton gostava de Ler - Saber em Gel.pdf
PowerPoint Newton gostava de Ler - Saber em Gel.pdf
 
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
 
OS elementos de uma boa Redação para o ENEM.pdf
OS elementos de uma boa Redação para o ENEM.pdfOS elementos de uma boa Redação para o ENEM.pdf
OS elementos de uma boa Redação para o ENEM.pdf
 
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdfCRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
 
Rimas, Luís Vaz de Camões. pptx
Rimas, Luís Vaz de Camões.          pptxRimas, Luís Vaz de Camões.          pptx
Rimas, Luís Vaz de Camões. pptx
 
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptxAVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
 

PostgreSQL

  • 1. características gerais de um SGBD open source Grupo: Thiago de A. Lima Daniel Fonseca Wlysses Chaves
  • 2. PostGreSQL PostgreSQL  é um sistema gerenciador de banco de dados  objeto relacional  (SGBDOR), desenvolvido como projeto de código aberto.
  • 3. 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 .
  • 4. 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.
  • 5. 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.
  • 6. 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
  • 7. 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.
  • 8. 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.
  • 9. 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
  • 10.
  • 11. 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.
  • 12. COMO PARTICIPAR ? 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!
  • 13. 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.
  • 14. 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
  • 15.
  • 16. 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.
  • 17. QUEM USA POSTGRE ? U.S. State Department
  • 18. CASOS DE SUCESSO O Detran do Ceará economizou R$ 1,7 milhão com banco de dados livre. A decisão do governo cearense de substituir a solução de banco de dados da Oracle pelo PostgreSQL fez com que o Detran economizasse gastos com pagamento de licenças e serviço de suporte técnico. O Detran tinha a seguinte arquitetura: um servidor de aplicação ligado a um servidor Oracle. Era nesta situação que as 1.287 tabelas e 426 views do banco se encontravam. Gastava-se muito dinheiro com o pagamento de licenças 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á.
  • 19. CASOS DE SUCESSO Quais foram as principais dificuldades encontradas? A principal dificuldade era que a equipe estava ocupada com as tarefas diárias de manutenção e desenvolvimento de novas ferramentas para o órgão. Além disso, a base de dados era muito complexa e utilizava muitos recursos que até então estavam disponíveis apenas no Oracle. Outro fator negativo foi que poucos técnicos tinham conhecimento em PostgreSQL. Como é a arquitetura do banco hoje? Agora o servidor de aplicação é ligado diretamente a um balanceador de carga, que é ligado a dois servidores do banco de dados. Além da economia com as licenças, quais outros resultados positivos a nova arquitetura trouxe? As consultas ficaram mais rápidas. Tem uma que levava 2 horas e, depois da migração, passou a ser realizada em 6 minutos. Na primeira vez, o responsável do Detran não acreditou e acabamos gastando as 2 horas tentando convencer que a consulta tinha sido mesmo realizada em 6 minutos.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25. Arquitetura do PostGres Aplicação Cliente Conector PostGre postmaster (daemon) postgre (backend) postgre (backend) postgre (backend) Fork Conexão inicial e autenticação Comunicação (Queries, resultados, etc) Kernel buffer Disco CLIENTE SERVIDOR BD Físico Tabelas Buffer
  • 26.
  • 27.
  • 28. 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
  • 29. 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
  • 31.
  • 32. BACKUP, EVITANDO DESASTRES 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). 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.
  • 33. Iniciando no PostGreSQL Como montar nesse elefante gigante?
  • 35. 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;
  • 36.
  • 37.
  • 38. 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
  • 39. 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.
  • 40. 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;
  • 41. 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:
  • 42. 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. Problema com o
  • 43. 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) ) INSERT INTO pessoa (endereco) VALUES ( ROW('Street Sand',69) ) Coluna única é obrigado usar “ROW”
  • 44.  
  • 45. 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
  • 46. 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
  • 47.
  • 48. 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
  • 49. 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');
  • 50. Em que situação o PostGreSQL deve ser usado ?
  • 51.
  • 52. 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
  • 53. Fim