53
características gerais de um SGBD open source Grupo: Thiago de A. Lima Daniel Fonseca Wlysses Chaves

PostgreSQL

Embed Size (px)

DESCRIPTION

Slides sobre banco de dados Open Source para disciplina Tecnologias de Banco de Dados da Faculdade IDEZ. Abordando o PostgreSQL como base.

Citation preview

características gerais de um SGBD open source

Grupo:Thiago de A. LimaDaniel FonsecaWlysses 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

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.

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

• 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

Ilimitado32 TB1.6 TB1 GBIlimitado250–1600 dependendo do tipo de colunaIlimitado

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:

• 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 dadosConsistência - os resultados são coerentes com as operações realizadasIsolamento - a execução de uma transação não interfere ou sofre interferência em relação às demais transações em execuçãoDurabilidade - 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(backend)

postgre(backend)

postgre(backend)

Fork

Conexão inicial e autenticação

Comunicação (Queries, resultados, etc)

BD Físico

Tabelas

Buffer Kernel buffer

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, umservidor 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 semintervençã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

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!

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. OPostgreSQL 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 paraarmazenar 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 OuCREATE 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

CHECKCREATE TABLE produtos ( cod_prod integer, nome text, preco numeric CHECK (preco > 0));

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

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

);

FOREIGN KEYCREATE 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 2147483647Tipo 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

• 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');

Em que situação o PostGreSQL deve ser usado ?

O que andam falando do PostGreSQL ?

Tem suporte ? È Seguro ? Tem Atualizações? É Rapido?

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