




























































































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
apostila postgresql
Tipologia: Notas de estudo
1 / 160
Esta página não é visível na pré-visualização
Não perca as partes importantes!





























































































Ribamar FS – [email protected] – http://ribafs.tk 17 de setembro de 2006
Livros Grátis
Milhares de livros grátis para download.
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
1 - Introdução História dos SGDBs Anos 60 - utilizados sistemas gerenciadores de arquivos (ISAM e VSAM), usados até hoje. Anos 70 - Gerenciadores de Bancos de dados de rede. Extinguiram-se nos anos 90. Anos 80 - SGBDRs (Oracle, DB2, SQLServer) Anos 90 - SGBDOR (Oracle, DB2, PostgreSQL e Informix) Anos 90 - SGBDOO (Caché) SGBD = Composto por programas de gerenciamento, armazenamento e acesso aos dados, com a finalidade de tornar ágil e eficiente a manipulação dos dados. Dicionário de dados - metadados, dados sobre os dados, ou seja, informações sobre a estrutura dos bancos de dados (nomes de tabelas, de campos, tipos de dados, etc). DBA - Database Administrator, com as funções de:
Traz também opções de extensão pelo usuário:
Citação de: http://www.dib.com.br/dib%20cd/LC2003/P%C3%A1ginas/LC2003_Conf.html Metrô de São Paulo e DATAPREV também utilizam o PostgreSQL. Sobre o Autor Ribamar FS Desenvolvedor de aplicativos web para a Intranet do DNOCS (Departamento Nacional de Obras Contra as Secas). Desenvolve atualmente em PHP com PostgreSQL. Trabalhou no DNOCS por algum tempo como administrador de redes Linux e FreeBSD. É graduado em Engenharia Civil pela Universidade de Fortaleza (UNIFOR) Com especialização em Irrigação e Drenagem pela UFC/IRYDA Cursando Especialização em Java na UNIFOR Concluiu o Curso de PostgreSQL pela dbExpert (São Paulo) e pelo Evolução (Fortaleza) Concluiu o curso de Administração Linux pelo Evolução (Fortaleza) Foi escritor colaborador da Revista Forum Access (na área de Access) É escritor colaborador da Revista Web Mobile (artigo sobre Joomla 02/2006) Foi professor de cursos de extensão na UNIFOR (PHP+MySQL e PHP + PostgreSQL) em 2005 e 2006 Apresentou palestra sobre PostgreSQL na UNIFOR no dia 29/03/2006. Apresentou palestra sobre PostgreSQL na UFC no dia 21/09/2006 (II Semana de Software Livre da UFC). Compartilha seus conhecimentos através do site: http://ribafs.tk (http://www.geocities.com/ribafsindex) e http://www.ribafs.net
Pré-requisitos para instalação do PostgreSQL num UNIX:
Copiar o script de inicialização “linux” para o /etc/init.d (Debians): De /usr/local/src/postgresql-8.1.4/contrib/start-script/linux para /etc/init.d/postgresql Dar permissão de execução: chmod u+x /etc/init.d/postgresql Se no Ubuntu ou outro Debian: su - postgres gedit .bash_profile (e adicione a linha): PATH=/usr/local/pgsql/bin:$PATH Pós Instalação (sh,bash,ksh e zsh): LD_LIBRARY_PATH=/usr/local/pgsql/lib export LD_LIBRARY_PATH Ou no ~/.bash_profile do usuário postgres initdb – inicializa o cluster, cria os scripts de configuração default. postmaster – inicia o processo do servidor responsável por escutar por pedidos de conexão. Para suporte aos locales do Brasil usar: /usr/local/pgsql/bin/initdb -locale=pt_BR -D /usr/local/pgsql/data A instalação via fontes (sources) em algumas distribuições muito enxutas, voltadas para para desktop, pode não funcionar da primeira vez, pois faltarão algumas bibliotecas, compiladores, etc. Após a instalação está criado o agrupamento principal (cluster main) de bancos de dados do PostgreSQL. Caso não se tenha confiança nos usuários locais é recomendável utilizar a opção -W, -- pwprompt ou –pwfile do initdb, que atribuirá uma senha ao superusuário. No arquivo pg_hba.conf utilizar autenticação tipo md5, password ou cript, antes de iniciar o servidor pela primeira vez. Quando o programa que inicia o servidor (postmaster) está em execução, é criado um PID e armazenado dentro do arquivo postmaster.pid, dentro do subdiretório data. Ele impede que mais de um processo postmaster seja executado usando o mesmo cluster e diretório de dados. Baixar PostgreSQL via Anonymous CVS: Baixar CVS de - http://www.nongnu.org/cvs/ Instalar e Logar com qualquer senha: cvs -d :pserver:[email protected]:/projects/cvsroot login Baixar fontes: cvs -z3 -d :pserver:[email protected]:/projects/cvsroot co -P pgsql Isto irá instalar o PostgreSQL num subdiretório pgsql do diretório atual. Atualizar a última instalação via CVS: Acesse o diretório pgsql e execute - cvs -z3 update -d -P Isto irá baixar somente as alterações ocorridas após a última instalação.
Sugestão de Padrão
3 - DDL (Data Definition Language) 3.1 - Criação e exclusão de bancos, esquemas, tabelas, views, etc Obs.: Nomes de objetos e campos não podem usar hífen (-). Alternativamente usar sublinhado (_). campo-1 Inválido campo_1 Válido Nomes de Identificadores Utiliza-se por convenção as palavras chaves do SQL em maiúsculas e os identificadores dos objetos que criamos em minúsculas. Identificadores digitados em maiúsculas serão gravados em minúsculas, a não ser que venham entre aspas “”. Revisões da Linguagem SQL SQL – 1989 SQL – 1992 SQL – 1999 SQL – 2003 Divisões da SQL DML – Linguagem de Manipulação de Dados DDL – Linguagem de Definição de Dados DCL – Linguagem de Controle de Dados (autorização de dados e licença de usuários para controlar quem tem acesso aos dados). DQL – Linguagem de Consulta de Dados (Tem apenas um comando: SELECT).
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
CREATE TABLE primeira_tabela ( primeiro_campo text, segundo_campo integer ); Excluindo Tabela DROP TABLE primeira_tabela; Valor Default (padrão) Para Campos Ao definir um valor default para um campo, ao ser cadastrado o registro e este campo não for informado, o valor default é assumido. Caso não seja declarado explicitamente um valor default, o valor nulo (NULL) será o valor default. CREATE TABLE produtos ( produto_no integer, descricao text, preco numeric DEFAULT 9. ); Constraints (Restrições) CHECK Ao criar uma tabela podemos prever que o banco exija que o valor de um campo satisfaça uma expressão CREATE TABLE produtos ( produto_no integer, descricao text, preco numeric CHECK (preco > 0) ); Dando nome à restrição check****. Isso ajuda a tornar mais amigável as mensagens de erro. CREATE TABLE produtos ( produto_no integer, descricao text, preco numeric CONSTRAINT preco_positivo CHECK (preco > 0) ); CREATE TABLE produtos ( produto_no integer, descricao text, desconto numeric CHECK (desconto > 0 AND desconto < 0.10), preco numeric CONSTRAINT preco_positivo CHECK (preco > 0), check (preco > desconto) ); Constraint NOT NULL Obrigar o preenchimento de um campo. Ideal para campos importantes que não devem ficar sem preenchimento. Mas devemos ter em mente que até um espaço em branco atende a esta restrição. CREATE TABLE produtos ( cod_prod integer NOT NULL CHECK (cod_prod > 0),
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) );
CREATE TABLE t0 ( a integer PRIMARY KEY, b integer, c integer, FOREIGN KEY (b, c) REFERENCES outra_tabela - - a coluna de destino será a PK ); CREATE TABLE t1 ( a integer PRIMARY KEY, b integer, c integer, FOREIGN KEY (b, c) REFERENCES outra_tabela (c1, c2) ); OBS.: Preferir sempre criar FK, utilizando a palavra reservada FOREIGN KEY e não somente com REFERENCES. Obviamente, o número de colunas e tipo na restrição devem ser semelhantes ao número e tipo das colunas referenciadas. SIMULANDO ENUM Para simular a constraint enum do MySQL, podemos usar a constraint check. Dica do site "PostgreSQL & PHP Tutorials". CREATE TABLE pessoa( codigo int null primary key, cor_favorita varchar(255) not null, check (cor_favorita IN ('vermelha', 'verde', 'azul')) ); INSERT INTO pessoa (codigo, cor_favorita) values (1, 'vermelha'); -- OK INSERT INTO pessoa (codigo, cor_favorita) values (1, 'amarela'); -- Erro, amarelo não consta Herança Podemos criar uma tabela que herda todos os campos de outra tabela existente. CREATE TABLE cidades ( nome text, populacao float, altitude int -- (em pés) ); CREATE TABLE capitais ( estado char(2) ) INHERITS (cidades); capitais assim passa a ter também todos os campos da tabela cidades. Segundo uma entrevista (vide DBFree Magazine No. 2) com a equipe de desenvolvimento do PostgreSQL, evite utilizar herança de tabelas. Esquemas (Schema)