Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


PostgreSQL - Apostilas - Informática Part1, Notas de estudo de Informática

Apostilas de Informática sobre PostgreSQL, Instalação, Linux, Windows, DDL (Data Definition Language), Criação e exclusão de bancos, esquemas, tabelas, views, Constraints, DML (Data Manipulation Language), Funções Internas, Funções Definidas pelo Usuário e Triggers, DCL (Data Control Language) - Administração.

Tipologia: Notas de estudo

2013

Compartilhado em 27/08/2013

Garoto
Garoto 🇪🇸

4.6

(121)

1 / 52

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
2
ÍNDICE
Capítulo Página
1 – Introdução . . . . . . . . . . 4
2 - Instalação . . . . . . . . . 8
2.1 - No Linux
2.2 - No Windows
3 - DDL (Data Definition Language) . . . . . . . 13
3.1 - Criação e exclusão de bancos, esquemas, tabelas, views, Constraints, etc
3.2 - Alterações nos objetos dos bancos
3.3 - Índices, Tipos de Dados e Integridade Referencial
4 - DML (Data Manipulation Language) . . . . . . . 34
4.1 - Consultas (select,insert, update e delete)
4.2 - Consultas JOINS
4.3 - Sub Consultas
5 - Funções Internas . . . . . . . . 45
5.1 - Strings
5.2 - Matemáticas
5.3 - Agrupamento (Agregação)
5.4 - Data/Hora
5.5 - Formatação de Tipos de Dados
5.6 - Conversão de Tipos (CAST)
6 - Funções Definidas pelo Usuário e Triggers . . . . . . 55
6.1 - SQL
6.2 - PlpgSQL
6.3 – Triggers
7 - DCL (Data Control Language) - Administração . . . . . 68
7.1 - Usuários, grupos e privilégios
8 - Transações . . . . . . . . . . 72
9 – Administração . . . . . . . . . . 75
9.1 - Backup e Restore
9.2 - Importar e Exportar
9.3 - Converter
9.4 - Otimização e Desempenho
10 - Replicação . . . . . . . . . . 84
11 - Configurações . . . . . . . . . . 86
10.1 - Copiar o script de inicialização dos contribs
10.2 - Adicionar ao Path
10.3 - Configurar acessos (pg_hba.conf)
10.4- Configurações diversas (postgresql.conf)
12 – Metadados (Catálogo) . . . . . . . . 92
13 - Conectividade . . . . . . . . . . 105
13.1 - Com Java (JDBC)
13.2 - Com aplicativos Windows (ODBC)
13.3 - Com PHP
13.4 - Exemplos de conexão com PHP, Java e VB
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34

Pré-visualização parcial do texto

Baixe PostgreSQL - Apostilas - Informática Part1 e outras Notas de estudo em PDF para Informática, somente na Docsity!

ÍNDICE

Capítulo Página 1 – Introdução.......... 4 2 - Instalação......... 8 2.1 - No Linux 2.2 - No Windows 3 - DDL (Data Definition Language)....... 13 3.1 - Criação e exclusão de bancos, esquemas, tabelas, views, Constraints, etc 3.2 - Alterações nos objetos dos bancos 3.3 - Índices, Tipos de Dados e Integridade Referencial 4 - DML (Data Manipulation Language)....... 34 4.1 - Consultas (select,insert, update e delete) 4.2 - Consultas JOINS 4.3 - Sub Consultas 5 - Funções Internas........ 45 5.1 - Strings 5.2 - Matemáticas 5.3 - Agrupamento (Agregação) 5.4 - Data/Hora 5.5 - Formatação de Tipos de Dados 5.6 - Conversão de Tipos (CAST) 6 - Funções Definidas pelo Usuário e Triggers...... 55 6.1 - SQL 6.2 - PlpgSQL 6.3 – Triggers 7 - DCL (Data Control Language) - Administração..... 68 7.1 - Usuários, grupos e privilégios 8 - Transações.......... 72 9 – Administração.......... 75 9.1 - Backup e Restore 9.2 - Importar e Exportar 9.3 - Converter 9.4 - Otimização e Desempenho 10 - Replicação.......... 84 11 - Configurações.......... 86 10.1 - Copiar o script de inicialização dos contribs 10.2 - Adicionar ao Path 10.3 - Configurar acessos (pg_hba.conf) 10.4- Configurações diversas (postgresql.conf) 12 – Metadados (Catálogo)........ 92 13 - Conectividade.......... 105 13.1 - Com Java (JDBC) 13.2 - Com aplicativos Windows (ODBC) 13.3 - Com PHP 13.4 - Exemplos de conexão com PHP, Java e VB

14 - Ferramentas.......... 108 14.1 - psql 14.2 - phpPgAdmin 14.3 - PgAdmin 14.4 - EMS PostgreSQL 14.5 - Azzurry Clay (modelagem com o Eclipse) 14.6 - dbVisualizer 14.7 - OpenOffice Base 15 – Apêndices.......... 124 15.1 – Planejamento e Projeto de Bancos de Dados 15.2 – Implementação de Banco de Dados com o PostgreSQL 15.3 - Integridade Referencial - PostgreSQL 15.4 – Dicas Práticas de uso do SQL 15.5 – Dicas sobre Desempenho e Otimizações do PostgreSQL 16 – Exercícios.......... 149 17 - Referências.......... 154

Tabelas – são subdivisões de um esquema, nelas realmente ficam armazenados os dados de um banco. Uma tabela parece realmente com uma tabela em papel, tipo planilha, com linhas e colunas. Cada linha representa um registro de banco de dados e cada cruzamento de coluna com linha representa um campo de tabela. Tipo de Dados de um campo restringe o conjunto de valores (domínio) que pode ser atribuído ao campo e atribui semântica aos dados armazenados. Um campo do tipo numérico não aceita dados do tipo texto ou similar. Citação da Introdução do documento sobre otimização do PostgreSQL POSTGRESQL é um SGBD objeto-relational (SGBDOR) desenvolvido via Internet por um grupo de desenvolvedores espalhados pelo globo. É uma alternativa de código fonte-aberta para SGBDs comerciais como Oracle e Informix. O POSTGRESQL foi desenvolvido originalmente na Universidade de Califórnia em Berkeley. Em 1996, um grupo começou o desenvolvimento do SGBD na Internet. Eles usam e-mail para compartilhar idéias e servidores de arquivos para compartilhar código. POSTGRESQL é agora comparável à SGBDs comerciais em termos de características, desempenho e confiança. Hoje tem transações, views, procedimentos armazenados, e constranints de integridade referencial. Apóia um número grande de interfaces de programação, como ODBC, Java (JDBC), TCL/TK, PHP, Perl e Python, entre outros. POSTGRESQL continua avançando a um tremendo passo, graças a um grupo talentoso de desenvolvedores via Internet. (Bruce Momjian - 16th January 2003) Projeto POSTGRES (1986-1994): Partiu do projeto do SGBD Ingres de Berkeley. Projetista: Michael Stonebraker. Em 1995 dois estudantes de Berkeley (Jolly Chen e Andrew Yu) adicionam suporte a SQL. Seu novo nome: Postgres95. Foi totalmente reescrito em C e também adotou a SQL. Foi originalmente patrocinado pelo DARPA, ARO, NSF e ESL Inc. Em 1996: Disponibilizado na Internet sob o nome de PostgreSQL. O PostgreSQL aniversariou no dia 08/07/2006, quando completou 10 anos (08/07/1996). Seu décimo aniversário foi comemorado nos dias 08 e 09 de julho próximo, em Toronto, Canadá, com algumas conferências sobre o mesmo. Atualmente está na versão 8.1.4 (14/09/2006). Para saber mais sobre a história do PostgreSQL visite o site oficial em: http://www.postgresql.org/docs/current/interactive/history.html Ou em português em: http://pgdocptbr.sourceforge.net/pg80/history.html Características:

  • O PostgreSQL suporta grande parte do SQL ANSI, inclusive do SQL 2003, além de oferecer outros recursos importantes, como:
  • Comandos complexos
  • Chaves estrangeiras (Foreign Key)
  • Gatilhos (Triggers)
  • Visões (views)
  • Integridade de Transações
  • Controle de Simultaneidade Multiversão (MVCC)
  • Suporta múltiplas transações online concorrentes entre usuários.
  • Suporte a Rules (sistema de regras que reescreve diretivas SQL)
  • Criação de tabelas temporárias (CREATE TEMP TABLE nome(listadecampos tipos);)

Traz também opções de extensão pelo usuário:

  • Tipos de dados
  • Funções
  • Operadores
  • Funções de Agregação (Agrupamento)
  • Métodos de Índice
  • Linguagens Procedurais (Stored Procedures) Licença Sua licença é BSD, portanto pode ser utilizado, modificado e distribuído por qualquer pessoa ou empresa para qualquer finalidade, sem qualquer encargo, em quaisquer dos sistemas operacionais suportados. Empresas que Utilizam PostgreSQL BASF (PDF format) Fujitsu Apple RedHat Sun Pervasive Mohawk Software Proximity Radio Paradise Shannon Medical Center Spiros Louis Stadium The Dravis Group OSS Report Vanten Inc. SRA Rambler Netezza VA Software Travel Post National Weather Service Aplicações Corporativas de Alto Volume: Uma Solução com o PostgreSQL A utilização da dupla PostgreSQL+Linux nas empresas cresce rapidamente e é um exemplo de como produtos Open Source podem ajudar empresas a racionalizar os custos de TI. Uma das características do PostgreSQL é a sua capacidade de lidar com um grande volume de dados. E-xistem aplicações em produção com tabelas possuindo mais de 100 milhões de linhas. No Brasil, existem casos de sucesso de empresas lidando com bases com dezenas de milhões de registros gerenciadas pelo PostgreSQL. Uma das maiores implantações de PostgreSQL no Brasil é na Atrium Telecom, empresa de tele-fonia corporativa de São Paulo. O PostgreSQL é utilizado como banco de dados do sistema de billing e tem uma base de dados de mais de 100GB e efetua 1 milhão de transações diárias. As maiores tabelas do sistema contam com mais de 70 milhões de linhas. A utilização do banco de dados PostgreSQL é cada vez mais ampla nas empresas que buscam um servidor de banco de dados altamente sofisticado, com alta performance, estável e capacitado para lidar com grandes volumes de dados. O fato de ser um produto Open Source, sem custos de licença para nenhum uso, torna o PostgreSQL uma alternativa extremamente atraente para empresas que buscam um custo total de propriedade (TCO) menor para os ativos de TI.

2 – Instalação Instalação no Windows XP Lembrar que: não instala em sistema de arquivos FAT-32, mesmo que seja o XP em FAT-32, ele não instala. Precisa instalar em NTFS e não instala no XP Start Edition.

  • Fazer download do site oficial (www.postgresql.org) (hoje postgresql-8.1.4-1.zip)
  • Executar o arquivo postgresql-8.1.msi
  • Selecionar idioma e Start. Depois em Próximo.
  • Na tela Informações de Instalações existem muitas informações importantes:
    • Sugere a leitura da FAQ
    • Fala das licenças dos diversos softwares a serem instalados
    • As versões 95, 98 e Me do Windows não são suportadas pelo PostgreSQL
    • Usar obrigatoriamente em sistema de arquivos NTFS
    • Instalar como serviço (mesmo que deixe como manual)
    • O PostgreSQL não executa com usuário que tenha privilégios de administrador
    • Os drivers jdbc estão no subdiretório \jdbc, que deve ser adicionada ao CLASSPATH
  • Na Tela "Opções de Instalação" marque:
    • Suporte para idioma nativo (importante para ter as mensagens em pt_BR)
    • E outros que considere importantes e clique em Próximo
  • Na tela "Configuração do Serviço":
    • Poderá optar entre instalar como serviço ou não. Como serviço é mais prático. Clique em Próximo (ele criará uma senha)
    • Obs.: Caso já tenha instalado o PostgreSQL antes nesta máquina deverá remover o usuário "postgres" antes de continuar:
    • Painel de controle - Ferramentas administrativas - Gerenciamento do computador - Usuários e grupos locais - Usuários. Remova o "postgres"
    • Agora clique em Próximo e Sim
  • Na tela "Inicializar o agrupamento de bancos de dados:
    • Caso precise acessar sua máquina de outra remota marque Endereços
    • Em Locale selecione Português Brasil
    • Em Codificação selecione LATIN
    • Entre com uma senha e repita. Altere o usuário se for o caso e Próximo.
  • Na tela "Habilitar Linguagens Procedurais" deixe marcada PL/pgsql e Próximo
  • Na tela "Habilitar Módulos Contrib" marque os desejados e Próximo
  • Na tela "Habilitar PostGIS em templae1" marque se precisar que todos os bancos tragam o PostGIS e Próximo e Próximo.
  • Após instalar, na tela "Instalação concluída" recomenda-se que se cadastrar na lista pgsql-announce, que envia informações semanais sobre novas versões e correções de error. Basta clicar no botão, fazer o cadastro e Concluir. Editar postgresql.conf e adicionar a linha (datestyle = 'sql european'), após a existente.

Pré-requisitos para instalação do PostgreSQL num UNIX:

  • make do GNU (gmake ou make)
  • compilador C, preferido GCC mais recente
  • gzip
  • biblioteca readline (para psql)
  • gettext (para NLS)
  • kerberos, openssl e pam (opcional, para autenticação) Instalação no Linux Várias distribuições já contam com binários para instalação do PostgreSQL (Ubuntu, Debian, Slackware, RedHat, Fedora, etc). Em uma instalação padrão do Ubuntu veja o que precisa para instalar os fontes: Antes de instalar: sudo apt-get install build-essential sudo apt-get install libreadline-dev sudo apt-get install zlib1g-dev sudo apt-get install gettext E use make ao invés de gmake. Mas caso queira ter um controle maior instalando os fontes, apenas faça o download e descompacte (gosto de descompactar em /usr/local/src e instalar no diretório default, que é /usr/local/pgsql). Instalar pelos binários da distribuição tem as vantagens de já instalar e configurar praticamente tudo automaticamente, mas instalar dos fontes dá um maior controle sobre as configurações (você sabe que tudo ficará no /usr/local/pgsql), possibilidade de instalar sempre a última versão. Aqui a instalação é no modo texto, mas mesmo assim não dá trabalho. Após descompactar visualize ou edite o arquivo INSTALL e siga as recomendações resumidas existentes no início do arquivo, reproduzidas abaixo: make distclean (adicionei, para o caso de ter que repetir os procedimentos) ./configure make (build – construir) su (mudar para superusuário, ou no Ubuntu usar sudo para as linhas abaixo) make install (instalar) groupadd postgres (criar o grupo postgres) useradd -g postgres -d /usr/local/pgsql postgres (criar o usuário postgres) mkdir /usr/local/pgsql/data chown postgres /usr/local/pgsql/data (tornar o postgres dono da pasta data) passwd postgres su - postgres (se logar como postgres) /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 2>&1 & (startar) /usr/local/pgsql/bin/createdb test /usr/local/pgsql/bin/psql test Opcionalmente: ./configure –enable-nls=pt_BR –with-openssl (para mensagens em português e autenticação SSL).

Também podemos criar um arquivo .cvsrc no home do usuário com as duas linhas: cvs -z update -d -P Atualização do PostgreSQL entre Versões Caso você tenha uma versão que não seja 8.1.x e esteja querendo instalar a 8.1.4, então precisa fazer um backup dos seus dados e restaurar logo após a instalação como sugerido em seguida. Será assumido que sua instalação foi em: /usr/local/pgsql e seus dados no sub data. Caso contrário atenha-se ao seu path para ajustes. 1 – Atenção para que seus bancos não estejam recebendo atualização durante o backup. Se preciso proíba acesso no pg_hba.conf. 2 – Efetuando backup: pg_dumpall > bancos.sql .Para preservar os OIDs use a opção -o no pg_dumpall. 3 – Pare o servidor pg_ctl stop ou outro comando Caso queira instalar a nova versão no mesmo diretório da anterior mv /usr/local/pgsql /usr/local/pgsql.old Então instale a nova versão, crie o diretório de dados e start o novo servidor. /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data Finalmente, restore seus dados com /usr/local/pgsql/bin/psql -d postgres -f bancos.sql Para mais detalhes sobre os procedimentos de instalação, veja itens 14.5 e 14.6 do manual. Plataformas Suportadas Atualmente o PostgreSQL suporta muitas plataformas, entre elas o Windows, Linux, FreeBSD, NetBSD, OpenBSD, Mac OS e diversos outros. Plataformas suportadas e as não suportadas na seção 14.7 do manual oficial. No PostgreSQL o processo postmaster escuta por conexões dos clientes. Existem mais dois processos também iniciados, ambos com nome postgres. Eles cuidam da gravação dos logs ou tabelas e da manutenção das estatísticas. Para cada conexão com uma aplicação cliente é criado um novo processo com o mesmo nome do usuário da conexão. Por isso é importante que cada aplicativo tenha seu usuário e se tenha um maior controle. Os arquivos de configuração (postgresql.conf, pg_hba.conf e pg_ident.conf) a partir da versão 8 podem ficar em diretório diferente do PGDATA.

Sugestão de Padrão

  • Nomes de bancos no plural
  • Nomes de tabelas no singular
  • Exemplo:
    • banco – clientes
    • tabela - cliente Criar Novo Cluster Caso sinta necessidade pode criar outros clusters, especialmente indicado para grupos de tabelas com muito acesso. O comando para criar um novo cluster na versão atual (8.1.3) do PostgreSQL é: banco=# \h create tablespace Comando: CREATE TABLESPACE Descrição: define uma nova tablespace Sintaxe: CREATE TABLESPACE nome_tablespace [ OWNER usuário ] LOCATION 'diretório' Exemplo: CREATE TABLESPACE ncluster OWNER usuário LOCATION '/usr/local/pgsql/nc'; CREATE TABLESPACE ncluster [OWNER postgres] LOCATION 'c:\ncluster'; O diretório deve estar vazio e pertencer ao usuário. Criando um banco no novo cluster: CREATE DATABASE bdcluster TABLESPACE = ncluster; Obs: Podem existir numa mesma máquina vários agrupamentos de bancos de dados (cluster) gerenciados por um mesmo ou por diferentes postmasters. Se usando tablespace o gerenciamento será de um mesmo postmaster, se inicializados por outro initdb será por outro. Setar o Tablespace default: SET default_tablespace = tablespace1; Listar os Tablespaces existentes: \db SELECT spcname FROM pg_tablespace; Detalhes extras no item 14.5 do manual oficial.

Exemplo Gráfico de Consultas (Tabela, com campos C1, C2) (Adaptação de exemplo da Wikipedia (http://pt.wikipedia.org) Tabela T Consulta Resultado C1 C2 SELECT * FROM T C1 C 1 a 1 a 2 b 2 b C1 C2 SELECT C1 FROM T C 1 a 1 2 b 2 C1 C2 SELECT * FROM T WHERE C1=1 C1 C 1 a 1 a 2 b C1 C2 SELECT C1 FROM T WHERE C2=b C 1 A 2 2 B Criar Banco banco=# \h create database Comando: CREATE DATABASE Descrição: cria um novo banco de dados Sintaxe: CREATE DATABASE nome [ [ WITH ] [ OWNER [=] dono_bd ] [ TEMPLATE [=] modelo ] [ ENCODING [=] codificação ] [ TABLESPACE [=] tablespace ] ] [ CONNECTION LIMIT [=] limite_con ] ] CREATE DATABASE nomebanco; Excluindo Um Banco DROP DATABASE nomebanco; Listar os bancos existentes: \l - - No psql psql -l (no prompt) SELECT datname FROM pg_database; Quando se cria um novo banco de dados sem indicar o modelo, o que de fato estamos fazendo é clonar o banco de dados template1.

Criar um banco para outro usuário: CREATE DATABASE nomebanco OWNER nomeuser; createdb -O nomeusuario nomebanco Obs.: requer ser superusuário para poder criar banco para outro usuário. Criar Tabela postgres=# \h create table Comando: CREATE TABLE Descrição: define uma nova tabela Sintaxe: CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE nome_tabela ( [ { nome_coluna tipo_dado [ DEFAULT expressão_padrão ] [ restrição_coluna [ ... ] ] | restrição_tabela | LIKE tabela_pai [ { INCLUDING | EXCLUDING } DEFAULTS ] } [, ... ] ] ) [ INHERITS ( tabela_pai [, ... ] ) ] [ WITH OIDS | WITHOUT OIDS ] [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ] [ TABLESPACE tablespace ] onde restrição_coluna é: [ CONSTRAINT nome_restrição ] { NOT NULL | NULL | UNIQUE [ USING INDEX TABLESPACE tablespace ] | PRIMARY KEY [ USING INDEX TABLESPACE tablespace ] | CHECK (expressão) | REFERENCES tabela_ref [ ( coluna_ref ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE ação ] [ ON UPDATE ação ] } [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] e restrição_tabela é: [ CONSTRAINT nome_restrição ] { UNIQUE ( nome_coluna [, ... ] ) [ USING INDEX TABLESPACE tablespace ] | PRIMARY KEY ( nome_coluna [, ... ] ) [ USING INDEX TABLESPACE tablespace ] | CHECK ( expressão ) | FOREIGN KEY ( nome_coluna [, ... ] ) REFERENCES tabela_ref [ ( coluna_ref [, ... ] ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE ação ] [ ON UPDATE ação ] } [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] Obs.: Atenção: nesta versão (8.1.3) WITH OID é opcional. As tabelas são criadas sem OID. \d – visualizar tabelas e outros objetos \d nometabela – visualizar estrutura da tabela

nome text NOT NULL, preco numeric ); Obs importante: nulos não são checados. UNIQUE não aceita valores repetidos, mas aceita vários nulos (já que estes não são checados). Cuidado com NULLs. Unique Constraint Obrigar valores exclusivos para cada campo em todos os registros CREATE TABLE produtos ( cod_prod integer UNIQUE, nome text, preco numeric ); CREATE TABLE produtos ( cod_prod integer, nome text, preco numeric, UNIQUE (cod_prod) ); CREATE TABLE exemplo ( a integer, b integer, c integer, UNIQUE (a, c) ); CREATE TABLE produtos ( cod_prod integer CONSTRAINT unq_cod_prod UNIQUE, nome text, preco numeric ); Evitando duplicação com nulos: create table teste( id serial not null, parent integer null, component integer not null ); postgres=# create unique index naoduplic on teste using btree (component) where (parent is null);

Chaves Primárias (Primary Key) A chave primária de uma tabela é formada internamente pela combinação das constraints UNIQUE e NOT NULL. Uma tabela pode ter no máximo uma chave primária. A teoria de bancos de dados relacional dita que toda tabela deve ter uma chave primária. O PostgreSQL não obriga que uma tabela tenha chave primária, mas é recomendável seguir, a não ser que esteja criando uma tabela para importar de outra que contenha registros duplicados para tratamento futuro ou algo parecido. CREATE TABLE produtos ( cod_prod integer UNIQUE NOT NULL, nome text, preco numeric ); CREATE TABLE produtos ( cod_prod integer PRIMARY KEY, nome text, preco numeric ); CREATE TABLE exemplo ( a integer, b integer, c integer, PRIMARY KEY (a, c) ); Chave Estrangeira (Foreign Key) Criadas com o objetivo de relacionar duas tabelas, mantendo a integridade referencial entre ambas. Especifica que o valor da coluna (ou grupo de colunas) deve corresponder a algum valor existente em um registro da outra tabela. Normalmente queremos que na tabela estrangeira existam somente registros que tenham um registro relacionado na tabela principal. Como também garantir que não se remova um registro na tabela principal que tenha registros relacionados na estrangeira. Tabela primária CREATE TABLE produtos ( cod_prod integer PRIMARY KEY, nome text, preco numeric ); CREATE TABLE pedidos ( cod_pedido integer PRIMARY KEY, cod_prod integer, quantidade integer, CONSTRAINT pedidos_fk FOREIGN KEY (cod_prod) REFERENCES produtos (cod_prod) );

\dn – visualizar esquemas Um banco de dados pode conter vários esquemas e dentro de cada um desses podemos criar várias tabelas. Ao invés de criar vários bancos de dados, criamos um e criamos esquemas dentro desse. Isso permite uma maior flexibilidade, pois uma única conexão ao banco permite acessar todos os esquemas e suas tabelas. Portanto devemos planejar bem para saber quantos bancos precisaremos, quantos esquemas em cada banco e quantas tabelas em cada esquema. Cada banco ao ser criado traz um esquema public, que é onde ficam todas as tabelas, caso não seja criado outro esquema. Este esquema public não é padrão ANSI. Caso se pretenda ao portável devemos excluir este esquema public e criar outros. Por default todos os usuários criados tem privilégio CREATE e USAGE para o esquema public. Criando Um Esquema CREATE SCHEMA nomeesquema; Excluindo Um Esquema DROP SCHEMA nomeesquema; Aqui, quando o esquema tem tabelas em seu interior, não é possível apagar dessa forma, temos que utilizar: DROP SCHEMA nomeesquema CASCADE; Que apaga o esquema e todas as suas tabelas, portanto muito cuidado. Obs.: O padrão SQL exige que se especifique RESTRICT (default no PostgreSQL) OU CASCADE, mas nenhum SGBD segue esta recomendação. Obs.: é recomendado ser explícito quanto aos campos a serem retornados, ao invés de usar

  • para todos, entrar com os nomes de todos os campos. Assim fica mais claro. Além do mais a consulta terá um melhor desempenho. Acessando Tabelas Em Esquemas SELECT * FROM nomeesquema.nometabela; Privilégios Em Esquemas \dp – visualizar permissões REVOKE CREATE ON SCHEMA public FROM PUBLIC; - - Remove o privilégio CREATE de todos os usuários. Obtendo Informações sobre os Esquemas: \dn \df current_schema* SELECT current_schema(); SELECT current_schemas(true); SELECT current_schemas(false); Visões (views) \dp – visualizar views e outros objetos Que são VIEWS?

São uma maneira simples de executar e exibir dados selecionados de consultas complexas em bancos. Em que elas são úteis? Elas economizam grande quantidade de digitação e esforço e apresentam somente os dados que desejamos. Criando Uma View CREATE VIEW recent_shipments AS SELECT count(*) AS num_shipped, max(ship_date), title FROM shipments JOIN editions USING (isbn) NATURAL JOIN books AS b (book_id) GROUP BY b.title ORDER BY num_shipped DESC; Usando Uma View SELECT * FROM recent_shipments; SELECT * FROM recent_shipments ORDER BY max DESC LIMIT 3; Destruindo Uma View DROP VIEW nomeview; Criar as Tabelas que servirão de Base CREATE TABLE client ( clientid SERIAL NOT NULL PRIMARY KEY, clientname VARCHAR(255) ); CREATE TABLE clientcontact ( contactid SERIAL NOT NULL PRIMARY KEY, clientid int CONSTRAINT client_contact_check REFERENCES client(clientid), name VARCHAR(255), phone VARCHAR(255), fax VARCHAR(255), emailaddress VARCHAR(255) ); CREATE VIEW client_contact_list AS SELECT client.clientid, clientname, name, emailaddress FROM client, clientcontact WHERE client.clientid = clientcontact.clientid; Estando no psql e digitando \d podemos visualizar também as views. O nome da visão deve ser distinto do nome de qualquer outra visão, tabela, seqüência ou índice no mesmo esquema. A visão não é materializada fisicamente. Em vez disso, a consulta é executada toda vez que a visão é referenciada em uma consulta. Fazer livre uso de visões é um aspecto chave de um bom projeto de banco de dados SQL. As visões podem ser utilizadas em praticamente todos os lugares onde uma tabela real pode ser utilizada. Construir visões baseadas em visões não é raro. Atualmente, as visões são somente para leitura: o sistema não permite inserção, atualização