












































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
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
1 / 52
Esta página não é visível na pré-visualização
Não perca as partes importantes!













































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:
Traz também opções de extensão pelo usuário:
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.
Pré-requisitos para instalação do PostgreSQL num UNIX:
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
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
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