Você está na página 1de 39
PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao

PostgreSQL Essencial

PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao
PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao
PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao
PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao
PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao
PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao
PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao
PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao
PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao

Luciano Mittmann

PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao
mittmann@gmail.com
mittmann@gmail.com

mittmann@gmail.com

mittmann@gmail.com
PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao
PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao
PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao
PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao
PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao
PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao
PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao
PostgreSQL Essencial Luciano Mittmann mittmann@gmail.com Agenda 1.Introdução ao PostgreSQL 2.Interfaces de acesso ao

Agenda

1.Introdução ao PostgreSQL 2.Interfaces de acesso ao PostgreSQL 3.Gerenciando tabelas 4.Selecionando dados 5.Funções e operadores 6.Alterando dados 7.Controle de transações 8.Outros objetos de banco de dados 9.Módulos adicionais do diretório contrib

2
2
de dados 9.Módulos adicionais do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL?
de dados 9.Módulos adicionais do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL?

Introdução PostgreSQL ao

do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um
do diretório contrib 2 Introdução PostgreSQL ao O que é o PostgreSQL? ● PostgreSQL é um

O que é o PostgreSQL?

PostgreSQL é um

relacional sistema gerenciador (SGBDR) de banco de dados

– – extensível avançado

– – multiplataforma de dentro código dos aberto padrões (Unix, Linux, Windows, Mac)

com a licença mais liberal possível (BSD)

4
4
de dentro código dos aberto padrões (Unix, Linux, Windows, Mac) – – com a licença mais
O que ele faz de mais? ● Suporta diversas features padrões SQL: – disparadores chaves

O que ele faz de mais?

Suporta diversas features padrões SQL:

disparadores chaves estrangeiras (triggers) (FKs)

– – controle visões (views) de concorrência (MVCC)

Permite a customização e criação de:

– – funções tipos linguagens de escalares dados procedurais e operadores e de agregação

5
5
dados procedurais e operadores e de agregação – 5 Quem o desenvolve hoje? ● Thomas Lockhart
dados procedurais e operadores e de agregação – 5 Quem o desenvolve hoje? ● Thomas Lockhart

Quem o desenvolve hoje?

Thomas Lockhart

Jolly Chen

Vadim Mikheev

Jan Wieck

Andrew Yu

Tom Lane

Bruce Momjian

Marc Fournier

Yu ● Tom Lane ● Bruce Momjian ● Marc Fournier 7 De onde ele surgiu? ●
7
7
Yu ● Tom Lane ● Bruce Momjian ● Marc Fournier 7 De onde ele surgiu? ●
De onde ele surgiu?
De onde ele surgiu?

De INGRES a POSTGRES: 1977-1994

Michael 77: desenvolveu Stonebraker, o INGRES prof. da – fundou UC - Berkeley o SGBDR!

86: (código continuou do POSTGRES a pesquisa não com partiu o POSTGRES do INGRES)

De POSTGRES a PostgreSQL: 1994-1996



– – 94: 95: 96: consolidação adicionado liberado reliberado como do como suporte Grupo Postgres95 PostgreSQL de a SQL Desenvolvimento 6.0

6
6
Grupo Postgres95 PostgreSQL de a SQL Desenvolvimento 6.0 6 Histórico das versões Padrão SQL Sem “Crash”
Grupo Postgres95 PostgreSQL de a SQL Desenvolvimento 6.0 6 Histórico das versões Padrão SQL Sem “Crash”

Histórico das versões

Padrão SQL Sem “Crash” Melhorias Desempenho no Gerenciamento Corporativo
Padrão SQL
Sem “Crash”
Melhorias Desempenho no Gerenciamento Corporativo
Melhorias Desempenho no Gerenciamento Corporativo WAL t r a n s . ) (log left schema,

WAL trans.)

(log

left schema, joins, PL/lang

OLTP, replicação, savepoints FSM,

partições, SMP, DW, Windows

em major releases ocorre alteração na estrutura dos dados

8
8
savepoints FSM, partições, SMP, DW, Windows ● em major releases ocorre alteração na estrutura dos dados
Funcionamento do PostgreSQL 1.conexão em um único ocorre para banco um de usuário dados e

Funcionamento do PostgreSQL

1.conexão em um único ocorre para banco um de usuário dados e 2.não sinônimos! existem 3.acesso de outro a esquema objetos com search o recurso path de 4.nativamente, há como acessar não objetos banco de outro

instância de catálogo dados banco esquema do objetos SGBD objeto banco spaces table esquema do
instância
de catálogo dados
banco
esquema
do objetos SGBD
objeto
banco
spaces table
esquema
do usuários SGBD
objeto
9
9
banco spaces table esquema do usuários SGBD objeto 9 Conexão pelo Java (via JDBC) ● Download
banco spaces table esquema do usuários SGBD objeto 9 Conexão pelo Java (via JDBC) ● Download

Conexão pelo Java (via JDBC)

Download do driver

http://jdbc.postgresql.org/

Biblioteca JAR

postgresql-<versão>.jar

Classe de acesso

org.postgresql.Driver

URL de conexão

– – ex: jdbc:postgresql://servidor[:porta]/banco “jdbc:postgresql://10.15.60.84:5434/ccb”

11
11
“jdbc:postgresql://10.15.60.84:5434/ccb” 11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via
“jdbc:postgresql://10.15.60.84:5434/ccb” 11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via

Interfaces PostgreSQL de acesso ao

11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp
11 Interfaces PostgreSQL de acesso ao Exemplo de acesso via Java $ $ javac java ­cp

Exemplo de acesso via Java

$ $ javac java ­cp ­cp .:~/lib/pgsql.jar ~/lib/pgsql.jar ConPg.java ConPg

import java.sql.*;

class public ConPg static { void main(String args[]) throws SQLException { DriverManager.registerDriver(new org.postgresql.Driver()); Connection "jdbc:postgresql://localhost:5432/cidades", "rodrigo", conn "celepar"); = DriverManager.getConnection(

Statement stmt = conn.createStatement(); ResultSet "SELECT rset nome = FROM stmt.executeQuery( cidade_internacional LIMIT 5"); while System.out.println(rset.getString(1)); (rset.next())

}

}

12
12
stmt.executeQuery( cidade_internacional LIMIT 5" ); while System.out.println(rset.getString(1)); (rset.next()) } } 12
psql: cliente em linha de comando ● Natureza – terminal interativo, como SQL*Plus ou sqlcmd

psql: cliente em linha de comando

Natureza

terminal interativo, como SQL*Plus ou sqlcmd

Multiplataforma

acompanha o cliente do PostgreSQL

Instalação no Debian

# apt­get install postgresql­client

Características

console, cliente rápido, padrão pode não requer ser do usado PostgreSQL, servidor na criação gráfico acesso de (ie: scripts nativo, X),

13
13
na criação gráfico acesso de (ie: scripts nativo, X), 13 psql: exemplos de parâmetros #1 ●

psql: exemplos de parâmetros #1na criação gráfico acesso de (ie: scripts nativo, X), 13 ● conectar-se porta “5432”, ao banco

conectar-se porta “5432”, ao banco servidor de “scelepar05480”, dados “cursopg”, usuário “sa_cursopg”, senha “stranger”

$ psql cursopg ­h scelepar05480 sa_cursopg ­p 5432 \

existentes exibir com os a campos listagem localmente, separados dos bancos sem por formatação de “:” dados e

$ psql ­l ­A ­t ­F “:”

15
15
de “:” dados e $ psql ­l ­A ­t ­F “:” 15 psql: principais parâmetros [NOMEBD
de “:” dados e $ psql ­l ­A ­t ­F “:” 15 psql: principais parâmetros [NOMEBD

psql: principais parâmetros

[NOMEBD [USUÁRIO]]

$ psql ­­help
$ psql ­­help

Uso: psql [OPÇÕES]

Opções ­d NOMEBD gerais:

­l ­f ­c ARQUIVO COMANDO ­­version ­­help Opções ­E de entrada e saída:

­o ­q ARQUIVO ­L ­s ARQUIVO Opções para formato modo modo de de de saída: saída saída em em tabela tabela HTML desalinhada (­P format=html) (­P format=unaligned) habilita define exibe somente atributos saída os em do registros tabela marcador expandida (­P table tuples_only) (­P do HTML expanded) (width, border) (­P tableattr=) define define separador separador de de registros campos (padrão: (padrão: "|") nova_linha) (­P fieldsep=) (­P recordsep=) servidor porta do servidor de banco de de dados banco ou de diretório dados (padrão: do soquete "5432") (padrão: "/var/run/postgresql")

Opções de conexão:

especifica o nome do banco de dados ao qual quer se conectar (padrão: $USER)

executa somente um comando (SQL ou interno) e sai

executa comandos de um arquivo e sai

lista os bancos de dados disponíveis e sai

mostra esta ajuda e sai

mostra informação sobre a versão e sai

mostra consultas que os comandos internos geram

executa silenciosamente (sem mensagens, somente saída da consulta)

envia resultados da consulta para um arquivo (ou |pipe)

modo passo­a­passo (confirma cada consulta)

envia log da sessão para arquivo

­A

­t ­H

­T TEXTO

­x

­F SEPARADOR

­R SEPARADOR

­h MÁQUINA

­P PORTA

­U USUÁRIO

­W

nome pergunta de usuário senha (pode do banco ocorrer de dados automaticamente) (padrão: $USER)

14
14
ocorrer de dados automaticamente) (padr ã o: $USER) 14 psql: exemplos de parâmetros #2 ● executar
ocorrer de dados automaticamente) (padr ã o: $USER) 14 psql: exemplos de parâmetros #2 ● executar

psql: exemplos de parâmetros #2

executar única linha de comando SQL

$ $ echo psql “select ­c “select version()” version()” | psql

executar arquivo de script SQL

$ $ cat psql script.sql < script.sql | psql

SQL $ $ cat psql script.sql < script.sql | psql $ psql ­f script.sql $ select

$ psql ­f script.sql

$ select cat > now(); script.sql << EOF select EOF current_user;

16
16
script.sql | psql $ psql ­f script.sql $ select cat > now(); script.sql << EOF select
psql: exemplos de parâmetros #3 ● redirecionar resultado para um arquivo $ $ psql psql

psql: exemplos de parâmetros #3

redirecionar resultado para um arquivo

$ $ psql psql ­l ­l ­o > bancos.log bancos.log

executar script de modo passo-a-passo

$ psql ­f script.sql ­s

script de modo passo-a-passo $ psql ­f script.sql ­s psql: conectado ao banco de dados Bem

psql: conectado ao banco de dados

Bem vindo ao psql 8.3.9, o terminal iterativo do PostgreSQL. Digite: \copyright \h para ajuda para com mostrar comandos termos SQL de distribuição \? \g \q para ou para terminar ajuda sair com com comandos ponto­e­vírgula do psql para executar a consulta postgres=#

executar instruções SQL

db=# SELECT current_date;

ponto e vírgula!

SQL db=# SELECT current_date; ponto e vírgula! ● exibir comandos SQL internos do cliente ● executar

exibir comandos SQL internos do cliente

executar comandos internos do psql

$ psql ­l ­E

db=# \l

17
17

barra invertida!

18
18
do psql $ psql ­l ­E db=# \l 17 barra invertida! 18 psql: obtendo ajuda dos
do psql $ psql ­l ­E db=# \l 17 barra invertida! 18 psql: obtendo ajuda dos

psql: obtendo ajuda dos comandosdo psql $ psql ­l ­E db=# \l 17 barra invertida! 18 ● listagem de ajudas

listagem de ajudas disponíveis

db=# \h

ajuda de instruções SQL

db=# db=# \h \h create copy table db=# \h truncate

listagem de comandos internos do psql

db=# \?

truncate ● listagem de comandos internos do psql db=# \? Antes de prosseguir o curso ●

Antes de prosseguir o curso

crie um esquema específico

db=# db=# CREATE \dn SCHEMA my_schema;

altere seu nome! para o
altere seu nome! para o

altere o seu caminho de busca

db=# SET search_path TO my_schema, public; db=# SHOW search_path;

verifique as tabelas existentes

db=# \d

19 20
19
20
SET search_path TO my_schema, public; db=# SHOW search_path; ● verifique as tabelas existentes db=# \d 19
SET search_path TO my_schema, public; db=# SHOW search_path; ● verifique as tabelas existentes db=# \d 19
psql: criando a tabela de teste ● criar a tabela de teste db=# db(# CREATE

psql: criando a tabela de teste

criar a tabela de teste

db=# db(# CREATE id des serial text TABLE not not tabela null null ( primary key, db(# );

db(#

criar índice secundário para a tabela

db=# db=# CREATE ON tabela INDEX (des); tabela_i01

db=# db=# CREATE ON tabela INDEX (des); tabela_i01 psql: populando a tabela de teste ● inserir

psql: populando a tabela de teste

inserir registros na tabela de teste

db=# db­# INSERT VALUES INTO ('primeiro'); tabela (des)

db=# db­# INSERT VALUES INTO ('segundo'); tabela (des)

db=#

21 22
21
22
VALUES INTO ('segundo'); tabela (des) db=# 21 22 psql: auto-completion, seu amigo! ● o que é

psql: auto-completion, seu amigo!VALUES INTO ('segundo'); tabela (des) db=# 21 22 ● o que é isso? – um possui

o que é isso?

um possui poderoso o bash, é acionado útil recurso com semelhante a tecla [Tab] ao que após a digitação de iniciais dos comandos

[Tab] ao que após a digitação de iniciais dos comandos ● nas instruções SQL db=# SEL

nas instruções SQL

db=# SELECT * FROM tabela;

nos comandos internos

db=# SEL ECT * FROM tab ela ; ● nos comandos internos db=# \d+ tab ela

db=# \d+ tabela

FROM tab ela ; ● nos comandos internos db=# \d+ tab ela busca na lista comando

busca na lista comando de instruções possíveis

busca catálogo objeto do no banco de dados

23
23
possíveis busca catálogo objeto do no banco de dados 23 psql: principais comandos internos Geral \encoding
possíveis busca catálogo objeto do no banco de dados 23 psql: principais comandos internos Geral \encoding
possíveis busca catálogo objeto do no banco de dados 23 psql: principais comandos internos Geral \encoding

psql: principais comandos internos

Geral \encoding \c[onnect] [CODIFICAÇÃO] [NOMEBD|­ conecta [USUÁRIO]] a um outro banco de dados \h [NOME] \set \q [NOME [VALOR]] sai do psql alterna apaga define (exclui) variável para duração variável interna da execução interna ou lista todos de comandos caso não (atualmente tenha parâmetros desabilitado) Buffer \e \s [ARQUIVO] [ARQUIVO] de consulta edita mostra o histórico buffer de ou consulta grava­o (ou em arquivo) um arquivo com um editor externo \w [ARQUIVO] Entrada/Saída \echo \i ARQUIVO [STRING] escreve executa cadeia comandos de de caracteres um arquivo na saída padrão \o [ARQUIVO]

mostra ou define codificação do cliente

mostra sintaxe dos comandos SQL, * para todos os comandos

\timing

\unset NOME

escreve o buffer de consulta para arquivo

envia todos os resultados da consulta para arquivo ou |pipe

exibir duração após execução de SQL

db=# db=# SELECT \timing count(1) FROM pg_class;

24
24
arquivo ou |pipe ● exibir duração após execução de SQL db=# db=# SELECT \timing count(1) FROM
psql: comandos internos psql: comandos internos ● alternar o banco de dados em uso ●

psql: comandos internos

psql: comandos internos psql: comandos internos ● alternar o banco de dados em uso ● executar

psql: comandos internos

alternar o banco de dados em uso

executar script de arquivo externo

db=# db=# \c \c cursopg template1 sa_cursopg

abrir editor de textos padrão (ex: vi)

db=# \e

sair do programa

db=# \i script.sql

redirecionar saída para arquivo

db=# \o saida.log db=# \o

voltar ao modo anterior

[Ctrl]+D db=# \q

exibir últimos comandos (histórico)

db=# \s db=#

26
26
\q ● exibir últimos comandos (histórico) db=# \s 26 psql: comandos informativos #1 Informativo \d [NOME]
\q ● exibir últimos comandos (histórico) db=# \s 26 psql: comandos informativos #1 Informativo \d [NOME]
\q ● exibir últimos comandos (histórico) db=# \s 26 psql: comandos informativos #1 Informativo \d [NOME]

psql: comandos informativos #1

Informativo \d [NOME] \d{t|i|s|v|S} [MODELO] lista tabelas/índices/sequências/visões/tabelas (adicione "+" para obter mais detalhe) do sistema lista lista lista conversões tablespaces funções de agregação (adicione "+" para obter mais detalhe) mostra lista conversões comentário de do tipos objeto lista lista funções domínios (adicione "+" para obter mais detalhe) lista lista lista operadores esquemas grupos (adicione "+" para obter mais detalhe) lista lista lista lista usuários tipos privilégios objetos de grandes, dado de (adicione acesso mesmo de que "+" tabelas, \lo_list para obter visões mais e sequências detalhe) lista lista privilégios todos os bancos de acesso de dados de tabelas, (adicione visões "+" para e sequências obter mais (mesmo detalhe) que \dp)

descreve tabela, índice, sequência ou visão

\da [MODELO]

\db [MODELO]

\dc [MODELO]

\dC

\dd [MODELO]

\dD [MODELO]

\df [MODELO]

\dg [MODELO]

\dn [MODELO]

\do [NOME]

\dl

\dp \dT [MODELO] [MODELO]

\du [MODELO]

\l

\z [MODELO]

listar bancos de dados existentes

db=# \l

\z [MODELO] ● listar bancos de dados existentes db=# \l psql: comandos informativos #2 ● seqüências)

psql: comandos informativos #2

seqüências) listar relações do (tabelas, banco de visões, dados atual

db=# \d

listar somente as tabelas do banco

db=# \dt

exibir informações detalhadas da tabela

db=# \d+ tabela

27 28
27
28
● listar somente as tabelas do banco db=# \dt ● exibir informações detalhadas da tabela db=#
● listar somente as tabelas do banco db=# \dt ● exibir informações detalhadas da tabela db=#
psql: comandos informativos #3 ● listar esquemas do banco db=# \dn ● listar índices do

psql: comandos informativos #3

listar esquemas do banco

db=# \dn

listar índices do banco

db=# db=# \di \di tabela_i01 db=# \df db=# \df+ funcao

listar funções do banco

exibir corpo de uma função

29
29
funções do banco ● exibir corpo de uma função 29 pgAdmin: tela inicial servidores bancos dica:
funções do banco ● exibir corpo de uma função 29 pgAdmin: tela inicial servidores bancos dica:

pgAdmin: tela inicial

servidores bancos dica: instruções exclusão para a criação do objeto ou esquemas objetos 31
servidores
bancos
dica: instruções
exclusão para a criação do objeto ou
esquemas
objetos
31
para a criação do objeto ou esquemas objetos 31 Ferramenta: pgAdmin III ● Home page e
para a criação do objeto ou esquemas objetos 31 Ferramenta: pgAdmin III ● Home page e

Ferramenta: pgAdmin III

do objeto ou esquemas objetos 31 Ferramenta: pgAdmin III ● Home page e download – http://www.pgadmin.org/

Home page e download

http://www.pgadmin.org/

Multiplataforma

Windows, Linux, FreeBSD, Mac OSX

Instalação no Debian

# apt­get install pgadmin3*

Características

fácil código de aberto, usar, fornece compilado dicas, (C++) faz acesso nativo,

30
30
usar, fornece compilado dicas, (C++) faz acesso nativo, 30 pgAdmin: configurando o servidor ● acesse o
usar, fornece compilado dicas, (C++) faz acesso nativo, 30 pgAdmin: configurando o servidor ● acesse o

pgAdmin: configurando o servidor

acesse o menu Arquivo -> Novo servidor

Nome - Apelido do servidor

Máquina

32
32

endereço nome do servidor de domínio IP ou

Manutenção do DB

banco inicial de dados

● Máquina 32 – endereço nome do servidor de domínio IP ou ● Manutenção do DB
pgAdmin: efetuando consultas ● selecione acesse o menu o banco “Ferramentas de dados desejado ->

pgAdmin: efetuando consultas

selecione acesse o menu o banco “Ferramentas de dados desejado -> Query e tool”

pressione [F5] para executar
pressione [F5] para
executar
janela entrada de
janela entrada de
resultados tabela de 33
resultados tabela de
33
para executar janela entrada de resultados tabela de 33 pgAdmin: planos de execução ● na “Query
para executar janela entrada de resultados tabela de 33 pgAdmin: planos de execução ● na “Query

pgAdmin: planos de execução

na “Query jenela -> do Explain” Query tool, ou pressione acesse o [F7] menu

do diagrama execução plano de 35
do diagrama execução plano de
35
acesse o [F7] menu do diagrama execução plano de 35 pgAdmin: exportando dados via SQL ●
acesse o [F7] menu do diagrama execução plano de 35 pgAdmin: exportando dados via SQL ●

pgAdmin: exportando dados via SQL

na “Query jenela -> do Execute Query to tool, file” acesse o menu

Row separator

– – CR/LF LF (Unix) (DOS)

Filename

34
34

destino arquivo (local) de

(DOS) ● Filename 34 – destino arquivo (local) de Ferramenta: phpPgAdmin ● Home page e download
(DOS) ● Filename 34 – destino arquivo (local) de Ferramenta: phpPgAdmin ● Home page e download

Ferramenta: phpPgAdmin

Home page e download

http://phppgadmin.sourceforge.net/

Multiplataforma

requer Apache e PHP

Instalação no Debian

# apt­get install phppgadmin

Características

– # apt­get install phppgadmin ● Características – PHP, requer específicas código apenas do aberto,

PHP, requer específicas código apenas do aberto, PostgreSQL, browser diversas no cliente, intuitivo funcionalidades scripts em

36
36
específicas código apenas do aberto, PostgreSQL, browser diversas no cliente, intuitivo funcionalidades scripts em 36
Ferramenta: TOra ● Home page e download – http://tora.sourceforge.net/ ● Plataformas – Linux e Windows

Ferramenta: TOra

Home page e download

http://tora.sourceforge.net/

Plataformas

Linux e Windows

Instalação no Debian

# apt­get install tora

Características

no Debian – # apt­get install tora ● Características “Toolkit for Oracle” – interface útil para

“Toolkit for Oracle”

interface útil para criação desktop de (compilado), stored procedures, licença GPL, navegação de schemas e execução de SQLs

37
37
licença GPL, navegação de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio
licença GPL, navegação de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio

Gerenciando tabelas

de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page
de schemas e execução de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page

Ferramenta: Aqua Data Studio

de SQLs 37 Gerenciando tabelas Ferramenta: Aqua Data Studio ● Home page e download – http://www.aquafold.com/

Home page e download

http://www.aquafold.com/

Multiplataforma

requer apenas Java VM (>= 1.5)

Instalação no Debian

# apt­get install datastudio

Características

fácil para instalação, diversos SGBDs, intuitivo, extração acompanha de DDLs, drivers IDE

para criação e execução de scripts

38
38
DDLs, drivers IDE para criação e execução de scripts 38 Introdução à tabela ● o que
DDLs, drivers IDE para criação e execução de scripts 38 Introdução à tabela ● o que

Introdução à tabela

o que é uma tabela num SGBDR?

é uma estrutura de dados formada por linhas

(registros, tuplas) e colunas (campos, atributos)

principais características

número coluna possui e ordem um das nome colunas único são fixos, e cada

número garantindo de linhas a ordem é variável, destas e em podendo geral não ser não-únicas

cada coluna possui um tipo de dado, que limita

o conjunto de possíveis valores

40
40
geral não ser não-únicas – cada coluna possui um tipo de dado, que limita o conjunto

Introdução à tabelaComo criar uma tabela? CREATE TABLE table_name ( [ 41 { column_name data_type [ DEFAULT

Introdução à tabela Como criar uma tabela? CREATE TABLE table_name ( [ 41 { column_name data_type

Como criar uma tabela?

CREATE TABLE table_name ( [

41
41

{ column_name data_type [ DEFAULT default_expr ]

)

| column_constraint table_constraint [ ]

[

[,

]

]

simplificada sintaxe
simplificada sintaxe

]

[ CONSTRAINT constraint_name ]

{ PRIMARY REFERENCES NOT NULL KEY | reftable NULL index_parameters | UNIQUE [ ( refcolumn index_parameters | CHECK ) ] ( expression | ) |

[

{

[ ON DELETE action ] [ ON UPDATE action ] }

CONSTRAINT UNIQUE ( column_name constraint_name [, ] PRIMARY CHECK ( KEY expression ( column_name ) | [, FOREIGN REFERENCES KEY ( reftable column_name [ ( [, refcolumn [,

] )

] ) index_parameters |

] ) index_parameters |

[

ON DELETE action ] [ ON UPDATE action ] ] } ) ]

42
42
| [ ON DELETE action ] [ ON UPDATE action ] ] } ) ] 42
| [ ON DELETE action ] [ ON UPDATE action ] ] } ) ] 42

Tabelas: exemplos #1| [ ON DELETE action ] [ ON UPDATE action ] ] } ) ] 42

] [ ON UPDATE action ] ] } ) ] 42 Tabelas: exemplos #1 Tabelas: exemplos

Tabelas: exemplos #2

criação da tabela de filmes

criação da tabela de distribuidores

CREATE TABLE filmes ( codigo CONSTRAINT char(5) filmes_pk PRIMARY KEY,

did titulo data_prod genero integer varchar(40) varchar(10), date NOT DEFAULT NULL, UNIQUE, ­­ current_date, distribuidor duracao interval hour to minute

CREATE PRIMARY nome did integer varchar(40) TABLE KEY(did) distribuidores CHECK NOT (did NULL, > 100), ( CREATE ); TABLE distribuidores2 ( nome did integer varchar(40) PRIMARY DEFAULT KEY, 'Luso Filmes'

distribuidores2 ( nome did integer varchar(40) PRIMARY DEFAULT KEY , 'Luso Filmes' outra maneira ); );
distribuidores2 ( nome did integer varchar(40) PRIMARY DEFAULT KEY , 'Luso Filmes' outra maneira ); );

outra

maneira

distribuidores2 ( nome did integer varchar(40) PRIMARY DEFAULT KEY , 'Luso Filmes' outra maneira ); );

);

); TABLE distribuidores2 ( nome did integer varchar(40) PRIMARY DEFAULT KEY , 'Luso Filmes' outra maneira );

44
44
distribuidores2 ( nome did integer varchar(40) PRIMARY DEFAULT KEY , 'Luso Filmes' outra maneira ); );
distribuidores2 ( nome did integer varchar(40) PRIMARY DEFAULT KEY , 'Luso Filmes' outra maneira ); );
Tabelas: opções específicas #1 ● [ GLOBAL | LOCAL ] TEMP – criação de tabelas

Tabelas: opções específicas #1

[ GLOBAL | LOCAL ] TEMP

criação de tabelas temporárias (global ou local)

INHERITS ( parent_table [,

] )

herança (como em e polimorfismo Orientação a Objetos) de tabelas

LIKE parent_table [

]

vínculo cópia das da colunas herança e restrições, sem o mesmo

{ WITH | WITHOUT } OIDS

identificador único para as linhas (ie: ROWID)

45
45
OIDS – identificador único para as linhas (ie: ROWID) 45 Tabelas: qualificando o esquema ● criação
OIDS – identificador único para as linhas (ie: ROWID) 45 Tabelas: qualificando o esquema ● criação

Tabelas: qualificando o esquema

criação de tabela em outro esquema

CREATE TABLE my_schema.tab ( ); SET CREATE search_path TABLE tab TO ( my_schema; id serial

id serial

TABLE tab TO ( my_schema; id serial id serial caminhos ambos à Roma! levam os );

caminhos ambos à Roma! levam os

id serial id serial caminhos ambos à Roma! levam os ); 47 Tabelas: opções específicas #2

);

47
47
id serial id serial caminhos ambos à Roma! levam os ); 47 Tabelas: opções específicas #2
id serial id serial caminhos ambos à Roma! levam os ); 47 Tabelas: opções específicas #2

Tabelas: opções específicas #2

[ DEFERRABLE | NOT DEFERRABLE ]

configuração de constraints adiáveis

TABLESPACE tablespace

alocação física da tabela em outra partição

USING INDEX TABLESPACE tablespace

alocação física do índice em outra partição

WITH ( storage_parameter [= value] [,

] )

armazenamento especificação de físico parâmetros da tabela adicionais (ex: fillfactor) para o

46
46
da tabela adicionais (ex: fillfactor ) para o 46 Tabelas: visualizando a estrutura ● via psql
da tabela adicionais (ex: fillfactor ) para o 46 Tabelas: visualizando a estrutura ● via psql

Tabelas: visualizando a estrutura

via psql

db=# \d filmes

Tabela "public.filmes"

­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ codigo Coluna | | character(5) Tipo | | not null Modificadores
| | | | not default null ('now'::text)::date
| interval hour to minute |
titulo
| character varying(40)
did
| integer
data_prod | date
genero
| character varying(10)
Índices: duracao
"filmes_titulo_key" "filmes_pk" PRIMARY UNIQUE, KEY, btree btree (codigo) (titulo)
instruções DDL
● via pgAdmin
– abrir a árvore
Esquemas, Colunas Servidor, Banco, Tabelas,
48
Como alterar a estrutura da tabela? ● incluir uma coluna ALTER ADD COLUMN TABLE distribuidores

Como alterar a estrutura da tabela?

incluir uma coluna

ALTER ADD COLUMN TABLE distribuidores endereco varchar(30);

excluir uma coluna

ALTER DROP TABLE COLUMN distribuidores endereco RESTRICT;

alterar o tipo de dados de uma coluna

ALTER ALTER TABLE COLUMN distribuidores nome TYPE varchar(50);

ALTER TABLE COLUMN distribuidores nome TYPE varchar(50) ; Como alterar a estrutura da tabela? ● alterar

Como alterar a estrutura da tabela?

alterar os valores padrões de campos

ALTER TABLE filmes ALTER ALTER COLUMN COLUMN duracao data_prod SET DROP DEFAULT DEFAULT, '1:20';

renomear uma coluna

ALTER RENAME TABLE COLUMN filmes data_prod TO producao;

49 50
49
50
RENAME TABLE COLUMN filmes data_prod TO producao; 49 50 Como alterar a estrutura da tabela? ●

Como alterar a estrutura da tabela?RENAME TABLE COLUMN filmes data_prod TO producao; 49 50 ● renomear a tabela ALTER RENAME TABLE

renomear a tabela

ALTER RENAME TABLE TO dist2; distribuidores2

tornar coluna obrigatória

ALTER ALTER TABLE COLUMN filmes genero SET NOT NULL;

retirar obrigatoriedade da coluna

ALTER ALTER TABLE COLUMN filmes genero DROP NOT NULL;

ALTER ALTER TABLE COLUMN filmes genero DROP NOT NULL ; Como alterar a estrutura da tabela?
ALTER ALTER TABLE COLUMN filmes genero DROP NOT NULL ; Como alterar a estrutura da tabela?

Como alterar a estrutura da tabela?

adicionar check constraint

ALTER ADD CONSTRAINT TABLE distribuidores ck_nome CHECK (length(nome) >= 5);

remover check constraint

ALTER DROP TABLE CONSTRAINT distribuidores ck_nome;

51 52
51
52
CHECK (length(nome) >= 5); ● remover check constraint ALTER DROP TABLE CONSTRAINT distribuidores ck_nome; 51 52
CHECK (length(nome) >= 5); ● remover check constraint ALTER DROP TABLE CONSTRAINT distribuidores ck_nome; 51 52
Como alterar a estrutura da tabela? ● mover a tabela para outro tablespace ALTER SET

Como alterar a estrutura da tabela?

mover a tabela para outro tablespace

ALTER SET TABLESPACE TABLE distribuidores tbs_veloz;

mover tabela para outro esquema

ALTER SET SCHEMA TABLE filmes public;

dica: no psql, use

\db para exibir os tablespaces

\dn para exibir os esquemas

53
53
exibir os tablespaces – \dn para exibir os esquemas 53 Comentários em objetos ● comentar campos
exibir os tablespaces – \dn para exibir os esquemas 53 Comentários em objetos ● comentar campos

Comentários em objetos

comentar campos e bancos, outros objetos esquemas, tabelas,

COMMENT COMMENT IS 'Curso ON ON SCHEMA DATABASE de PostgreSQL'; public cursopg COMMENT COMMENT IS 'Esquema ON ON TABLE COLUMN público filmes filmes.did (padrão)'; IS 'Filmes'; IS 'Código do distribuidor'; COMMENT ON TABLE filmes IS NULL;

remover o comentário

55
55
ON TABLE filmes IS NULL ; ● remover o comentário 55 Como destruir a tabela? DROP
ON TABLE filmes IS NULL ; ● remover o comentário 55 Como destruir a tabela? DROP

Como destruir a tabela?

DROP [ CASCADE TABLE [ | IF RESTRICT EXISTS ] ] name [,

IF EXISTS

]

caso a tabela não exista, não ocorre erro

CASCADE

automaticamente dependem da tabela exclui os objetos que

RESTRICT

o oposto da opção acima, e o default

54
54
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e

Selecionando dados

dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
dependem da tabela exclui os objetos que ● RESTRICT – o oposto da opção acima, e
Consultas: uma visão geral ● o processo ou o comando para obter de dados o

Consultas: uma visão geral

o processo ou o comando para obter

de dados o “SELECT” query de (ie: um é consulta banco uma instrução de ou dados consulta de é chamado DML SQL)

(Data um exemplo Manipulation de consulta Language) simples da SQL

um exemplo de consulta sem tabela

SELECT * FROM tabela; SELECT now();

consulta sem tabela SELECT * FROM tabela; SELECT now(); artifício ahá! não chamado precisa “DUAL” de

artifício ahá! não chamado precisa “DUAL” de um

57
57
artifício ahá! não chamado precisa “DUAL” de um 57 Consultas: tipos de junções ● preparar o
artifício ahá! não chamado precisa “DUAL” de um 57 Consultas: tipos de junções ● preparar o

Consultas: tipos de junções

preparar o seguinte caso de teste

CREATE INSERT CREATE TABLE INTO TABLE t1 t2 t1 VALUES (num (num int, int, (1, valor 'a'); nome text); text); INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO t1 t1 t2 t2 t2 VALUES VALUES VALUES VALUES VALUES (2, (3, (1, (3, (5, 'b'); 'c'); 'xxx'); 'yyy'); 'zzz'); SELECT SELECT * * FROM FROM t1; t2;

59
59
'zzz'); SELECT SELECT * * FROM FROM t1; t2; 59 Consultas: a cláusula FROM FROM table_reference
'zzz'); SELECT SELECT * * FROM FROM t1; t2; 59 Consultas: a cláusula FROM FROM table_reference

Consultas: a cláusula FROM

FROM table_reference table_reference [, [,

serve ou mais) para a serem definir lidas a lista para de tabelas a consulta (uma

a table_reference pode ser o nome de destas subconsulta, uma tabela (com uma ou junção sem ou esquema), combinação uma

elas se mais serão de cruzadas uma tabela numa for especificada, tabela virtual

]]

58
58
uma tabela numa for especificada, tabela virtual ]] 58 Consultas: tipos de junções ● CROSS JOIN
uma tabela numa for especificada, tabela virtual ]] 58 Consultas: tipos de junções ● CROSS JOIN

Consultas: tipos de junções

CROSS JOIN (resulta em N x M linhas)

SELECT SELECT * * FROM FROM t1 t1, CROSS t2; JOIN t2;

INNER JOIN (condição satisfeita nas duas)

SELECT SELECT INNER * * JOIN FROM FROM t2 t1 t1 ON t1.num = t2.num; SELECT INNER * JOIN FROM t2 t1 USING (num);

= t2.num; SELECT INNER * JOIN FROM t2 t1 USING (num); NATURAL INNER JOIN t2; notação

NATURAL INNER JOIN t2;

notação do PostgreSQL específica

60
60
= t2.num; SELECT INNER * JOIN FROM t2 t1 USING (num); NATURAL INNER JOIN t2; notação
Consultas: tipos de junções Consultas: utilização de apelidos ● LEFT e RIGHT JOIN (“buraco” em

Consultas: tipos de junções

Consultas: tipos de junções Consultas: utilização de apelidos ● LEFT e RIGHT JOIN (“buraco” em um

Consultas: utilização de apelidos

LEFT e RIGHT JOIN (“buraco” em um lado)

exemplos de utilização

SELECT LEFT JOIN * FROM t2 t1 ON t1.num = t2.num; SELECT LEFT JOIN * FROM t2 t1 USING (num); SELECT RIGHT * JOIN FROM t2 t1 ON t1.num = t2.num;

FULL JOIN (“buracos” nos dois lados)

SELECT FULL JOIN * FROM t2 t1 ON t1.num = t2.num;

SELECT * JOIN FROM ON nc.id TB_OutraTabelaComNomePeculiar TB_UmaTabelaComNomeComprido = np.num nc np WHERE np.campo > 5;

o “AS” é opcional!

nc np WHERE np.campo > 5; o “AS” é opcional! SELECT FROM pessoas * AS mae

SELECT FROM pessoas * AS mae ON JOIN mae.id pessoas = filho.id_mae; AS filho

61 62
61
62
ON JOIN mae.id pessoas = filho.id_mae; AS filho 61 62 Consultas: a cláusula WHERE WHERE search_condition
ON JOIN mae.id pessoas = filho.id_mae; AS filho 61 62 Consultas: a cláusula WHERE WHERE search_condition
ON JOIN mae.id pessoas = filho.id_mae; AS filho 61 62 Consultas: a cláusula WHERE WHERE search_condition

Consultas: a cláusula WHERE

WHERE search_condition

serve cláusula para FROM, filtrar mantendo os registros apenas obtidos os que da

atinjam search_condition valor dados qualquer lógico determinada (booleano) que é uma retorne condição expressão um tipo de de

SELECT SELECT * * FROM FROM fdt fdt WHERE WHERE c1 c1 > IN 5; (1, 2);

FROM FROM fdt fdt WHERE WHERE c1 c1 > IN 5; (1, 2); Consultas: lista de

Consultas: lista de seleção

além pode do ser “*”, utilizada a lista na específica cláusula de SELECT campos

SELECT SELECT SELECT tabl.a, a, tab1.*, b, c tab2.a, FROM tab2.a FROM tab1.b FROM

os rotulados, campos para da lista evitar de problemas seleção podem de ser interpretação ou redundância

SELECT SELECT a version() AS valor, AS b versao_atual; + c AS soma FROM

63 64
63
64
ser interpretação ou redundância SELECT SELECT a version() AS valor, AS b versao_atual; + c AS
ser interpretação ou redundância SELECT SELECT a version() AS valor, AS b versao_atual; + c AS
Consultas: operações de conjuntos query1 UNION [ALL] query2 “ALL” define se serão linhas consideradas duplicadas
Consultas: operações de conjuntos
query1 UNION [ALL] query2
“ALL” define se
serão linhas consideradas duplicadas
query1 query1 INTERSECT EXCEPT [ALL] [ALL] query2 query2
outros “MINUS” SGBDs em
círculo
quadrado
UNION
INTERSECT
EXCEPT
65
SGBDs em círculo quadrado UNION INTERSECT EXCEPT 65 Consultas: limitando o resultado LIMIT number ● serve
SGBDs em círculo quadrado UNION INTERSECT EXCEPT 65 Consultas: limitando o resultado LIMIT number ● serve

Consultas: limitando o resultado

LIMIT number

serve serem para retornadas limitar a de quantidade uma consulta de linhas a

SELECT * FROM t1 ORDER BY num LIMIT 2;

de linhas a SELECT * FROM t1 ORDER BY num LIMIT 2; em importante: conjunto usar

em importante: conjunto usar com “ORDER BY”!

OFFSET number

serve cláusula para LIMIT “pular” (usado as primeiras em paginações) N linhas da

SELECT LIMIT * 2 FROM OFFSET t1 1; ORDER BY num

67
67
da SELECT LIMIT * 2 FROM OFFSET t1 1; ORDER BY num 67 Consultas: a cláusula
da SELECT LIMIT * 2 FROM OFFSET t1 1; ORDER BY num 67 Consultas: a cláusula

Consultas: a cláusula ORDER BY

ORDER ] BY sort_expression [ASC | DESC]

[,

linhas, serve sort_expression para já processadas, definir pode a ordem ser sejam qualquer em retornadas que as
expressão seleção (podem que seria ser usados válida na números) lista de

SELECT a, b FROM tab1 ORDER BY a + b, c; SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER 2 DESC, BY sm; 1;

66
66
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER

Funções e operadores

SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
SELECT SELECT a a, + b b FROM AS sm tab1 FROM ORDER tabl BY ORDER
Funções matemáticas ● absoluto, logaritmo natural, logaritmo 10 SELECT abs(­17.4), ln(2.0), log(100.0); SELECT

Funções matemáticas

absoluto, logaritmo natural, logaritmo 10

SELECT abs(­17.4), ln(2.0), log(100.0); SELECT power(9, mod(9,4), 0.5), sqrt(9.0); exp(1.0),

arredondar, truncar

módulo, exponencial, potência, raiz

SELECT trunc(3.5), round(3.5), trunc(3.55,1); round(3.55,1), SELECT setseed(0.54823), random();

randômico, gerar semente

69
69
random(); ● randômico, gerar semente 69 Funções matemáticas – Exercício ● multiplicação
random(); ● randômico, gerar semente 69 Funções matemáticas – Exercício ● multiplicação

Funções matemáticas – Exercício

multiplicação de números da tabela

cursopg=> SELECT ??? FROM tabela; ­­­­­ mul

120

(1 registro)

DICA: ln (a . b . c) = ln a + ln b + ln c

(1 registro) ● DICA: ln (a . b . c) = ln a + ln b

Operadores matemáticos

adição, subtração, multiplicação, divisão

SELECT 1 + 2, 3 ­ 4, 2 * 3, 5 / 2; SELECT 5 % 2, 2 ^ 3, |/ 9, ||/ 27, 3!; SELECT 91 & 15, 32 | 3, 17 # 5, ~1;

módulo, exponenciação, raiz, fatorial

bitwise AND, OR, XOR e NOT

bitwise shift left e shift right

SELECT SELECT (12 >> 1 3::bit(8), 1)::bit(8), << 4, 3 << (3 1, B'00000110'::int; << 8 2)::bit(8), >> 2, 6 >> 1;

70
70
<< 8 2)::bit(8), >> 2, 6 >> 1; 70 Funções de texto - I ● concatenação
<< 8 2)::bit(8), >> 2, 6 >> 1; 70 Funções de texto - I ● concatenação

Funções de texto - I

concatenação de strings

SELECT 'Post' || 'greSQL', 'a' || null;

conversão de codificação

SELECT convert_from ('codifica çã o', 'LATIN1');

minúsculo, maiúsculo

SELECT lower('PARANÁ'), upper('Ponta Grossa');

iniciais maiúsculas

SELECT initcap('DIÁRIO'), initcap('olá');

71 72
71
72
Grossa'); ● iniciais maiúsculas SELECT initcap('DI Á RIO'), initcap('ol á '); 71 72
Grossa'); ● iniciais maiúsculas SELECT initcap('DI Á RIO'), initcap('ol á '); 71 72
Funções de texto - II ● localização de substring Funções de texto - III ●

Funções de texto - II

localização de substring

Funções de texto - II ● localização de substring Funções de texto - III ● comprimento

Funções de texto - III

comprimento do texto

SELECT position('gre' in 'PostgreSQL'); SELECT SELECT substring('PRAIA' substring('PRAIA' from from 2 3); for 3); SELECT SELECT substring('PRAIA' substring('PRAIA' for from 3); '); '^ b '),

SELECT ltrim(' trim(' a b a '); b

SELECT length('Oitocentos'); SELECT lpad('abc', rpad('abc', 5, '*'); 5, '*'), SELECT repeat('X', 3), repeat('abc', 2); SELECT replace('abcabcabc', 'c', ' ');

extrair substring

complementar texto (direita e esquerda)

repetir texto diversas vezes

remover espaços laterais

substituir substrings no texto

c '), rtrim(' a

73 74
73
74
substrings no texto c '), rtrim(' a 73 74 Funções de texto - IV ● cálculo
substrings no texto c '), rtrim(' a 73 74 Funções de texto - IV ● cálculo
substrings no texto c '), rtrim(' a 73 74 Funções de texto - IV ● cálculo

Funções de texto - IV

cálculo de MD5

SELECT md5('senhasecreta'), md5('aaa'); SELECT quote_literal('C\'est vrai!');

citação - aspas simples

extrair texto com delimitador

SELECT split_part('abc@fazenda.gov.br', '@', 1);

transformar texto em formato ASCII

SELECT to_ascii('Açafrão de Íris');

ASCII SELECT to_ascii('A ç afr ã o de Í ris'); Funções de texto – Exercício ●

Funções de texto – Exercício

reproduzir a seguinte saída via SQL

cursopg=> SELECT ??? FROM tabela; ­­­­+­­­­­­­­­­­­­­­­­­­­ id |

capitulo

1

2

3

4

5

| | Primeiro Segundo | | Terceiro Quarto | Quinto

(5 registros)

1

2

3

4

5

75 76
75
76
id | capitulo 1 2 3 4 5 | | Primeiro Segundo | | Terceiro Quarto
id | capitulo 1 2 3 4 5 | | Primeiro Segundo | | Terceiro Quarto
Funções de busca de padrão: LIKE Funções de busca de padrão: ER string [NOT] LIKE

Funções de busca de padrão: LIKE

Funções de busca de padrão: LIKE Funções de busca de padrão: ER string [NOT] LIKE pattern

Funções de busca de padrão: ER

string [NOT] LIKE pattern

operador padrão SQL ANSI

operadores de expressão regular (POSIX)

SELECT SELECT WHERE * * des FROM FROM ~ '^qu' tabela tabela AND des ~ 'to$';

“%” curingas: e “_”
“%” curingas: e “_”

SELECT SELECT WHERE * * des FROM FROM LIKE tabela tabela '%eiro'; WHERE des LIKE 'qu to';

SELECT WHERE AND * des des FROM NOT NOT tabela LIKE LIKE 'qu to' '%eiro';

ATENÇÃO: provocar leituras cuidado do com tipo o uso full do scan “LIKE” na tabela! – pode

SELECT WHERE * des FROM !~ tabela 'qu(a|i)'; WHERE des ~* '^Qu'; op. ação operadores
SELECT WHERE * des FROM !~ tabela 'qu(a|i)';
WHERE des ~* '^Qu';
op.
ação
operadores
~
~*
!~* !~
busca busca não busca padrão padrão (CS) (CI) (CS)
não busca (CI)
expressões regulares
77

usadas similar sed em e awk a egrep, ERs

exp significado ^ início final da da string string $ . qualquer caracter * +
exp
significado
^
início final da da string string
$
.
qualquer caracter
*
+
1 0 ou ou mais mais
78
$ . qualquer caracter * + 1 0 ou ou mais mais 78 Funções de formatação
$ . qualquer caracter * + 1 0 ou ou mais mais 78 Funções de formatação
$ . qualquer caracter * + 1 0 ou ou mais mais 78 Funções de formatação

Funções de formatação de tipo

converter para text com o to_char()

SELECT to_char(now(), 'HH12:MI:SS'); SELECT SELECT to_char(­125.8, to_char(125, '00000'); '999D99S'); SELECT to_date('0512 2000', 'DDMM YYYY'); SELECT to_number('2,454.8­', '9G999D9S');

valor
valor
padrão 79
padrão
79

converter para date com o to_date()

converter para numeric com o to_number()

to_date() ● converter para numeric com o to_number() Funções de data e hora ● data, hora
to_date() ● converter para numeric com o to_number() Funções de data e hora ● data, hora

Funções de data e hora

data, hora e data/hora atual

SELECT current_timestamp, current_date, now(); current_time, SELECT SELECT age('2001­04­10', age('1500­04­22'::timestamp); '1957­06­13');

calcular idade (duas versões)

extrair partes da data (ano, mês,

, ms)

SELECT date_part('hour', now());

truncar data/hora até determinado campo

SELECT date_trunc('month', now());

80
80
now()); ● truncar data/hora até determinado campo SELECT date_trunc('month', now()); 80
Operadores de data e hora ● adição de data com intervalo ou hora SELECT SELECT

Operadores de data e hora

adição de data com intervalo ou hora

SELECT SELECT date date '2001­09­28' '2001­09­28' + + 7; SELECT '4 months'::interval; date '2001­09­28' + time '03:00'; SELECT date '2001­09­28'; date '2001­10­01' ­ SELECT SELECT interval date timestamp '22 '2001­10­01' hours'; '2001­09­28 ­ 7::int; 23:00' ­

subtração de data com intervalo ou hora

81
81
­ ● subtração de data com intervalo ou hora 81 Expressões condicionais: case CASE WHEN [
­ ● subtração de data com intervalo ou hora 81 Expressões condicionais: case CASE WHEN [

Expressões condicionais: case

CASE WHEN [WHEN condition ] THEN result [ELSE result]

exemplo de utilização

END

ATENÇÃO: útil, este evite recurso! apesar utilizar de

SELECT num, CASE WHEN ELSE num 'ímpar' % 2 = 0 THEN 'par' END FROM t1;

' í mpar' % 2 = 0 THEN 'par' END FROM t1; condição: divisível por par

condição: divisível por par 2 é

83
83
END FROM t1; condição: divisível por par 2 é 83 Funções para lidar com seqüências ●
END FROM t1; condição: divisível por par 2 é 83 Funções para lidar com seqüências ●

Funções para lidar com seqüências

criar seqüência temporária

CREATE TEMP SEQUENCE seq_temp; SELECT nextval('seq_temp');

SELECT currval('seq_temp');

buscar valor atual (com e sem atualização)

será o próximo especificado exatamente valor

será o próximo especificado exatamente valor ● forçar atualização do valor SELECT

forçar atualização do valor

SELECT setval('seq_temp', 100); SELECT SELECT SELECT setval('seq_temp', nextval('seq_temp'); nextval('seq_temp'); 100, false);

82
82
nextval('seq_temp'); 100, false); 82 Expressões condicionais: case II CASE expression [ WHEN
nextval('seq_temp'); 100, false); 82 Expressões condicionais: case II CASE expression [ WHEN

Expressões condicionais: case II

CASE expression [WHEN WHEN value ] THEN result [ELSE result]

exemplo de utilização

END

SELECT num, CASE WHEN ELSE num 0 'ímpar' THEN % 2 'par'

END FROM t1;

84
84
de utilização END SELECT num, CASE WHEN ELSE num 0 ' í mpar' THEN % 2
Expressões condicionais: coalesce ● ● similar em retorna outros às o primeiro funções SGBDs NVL

Expressões condicionais: coalesce

● ● similar em retorna outros às o primeiro funções SGBDs NVL argumento e IFNULL não-nulo presentes

SELECT age(coalesce(datnasc, FROM TB_Cliente; coalesce(rg, cpf) now())) as documento, AS idade

coalesce(rg, cpf) now())) as documento, AS idade data não de estar nascimento cadastrada pode SELECT

data não de estar nascimento cadastrada pode

SELECT coalesce(nome_meio, nome_completo primeiro_nome || '') ' || ' || sobrenome AS FROM TB_Pessoa;

'') ' || ' || sobrenome AS FROM TB_Pessoa; pessoa pode não possuir sobrenome 85 Expressões

pessoa pode não

possuir sobrenome

85
85
AS FROM TB_Pessoa; pessoa pode não possuir sobrenome 85 Expressões de subconsulta: exists EXISTS (subquery) ●

Expressões de subconsulta: existsAS FROM TB_Pessoa; pessoa pode não possuir sobrenome 85 EXISTS (subquery) ● exemplo de utilização SELECT

EXISTS (subquery)

exemplo de utilização

SELECT num WHERE FROM t1 EXISTS (

não campos precisa especificar ou “*”

t1 EXISTS ( não campos precisa especificar ou “*” SELECT 1 WHERE FROM t2 t2.num =

SELECT 1 WHERE FROM t2 t2.num = t1.num

);

ou “*” SELECT 1 WHERE FROM t2 t2.num = t1.num ); referencia subconsulta “externas” linhas que

referencia subconsulta “externas” linhas que

87
87
); referencia subconsulta “externas” linhas que 87 Funções de agregação ● retornam um único valor
); referencia subconsulta “externas” linhas que 87 Funções de agregação ● retornam um único valor

Funções de agregação

retornam um único valor através de um

podem conjunto ser de criadas entradas pelo usuário (UDAs)

ex: contagem, mínimo e máximo

SELECT min(num), count(1), max(num) count(*), FROM t1; count(num),

distintas 3 o abordagens COUNT() para 86
distintas 3 o abordagens COUNT() para
86

ex: média, desvio padrão, variância

SELECT variance(num) avg(num), FROM stddev(num), t2;

SELECT variance(num) avg(num), FROM stddev(num), t2; Expressões de subconsulta: in, not in expression [ NOT ]
SELECT variance(num) avg(num), FROM stddev(num), t2; Expressões de subconsulta: in, not in expression [ NOT ]

Expressões de subconsulta: in, not in

expression [NOT] IN (subquery)

que retornar estejam somente em outra registros tabela

ATENÇÃO: utilizar se evite a retornar subconsulta itens! muitos

SELECT WHERE * num FROM IN t2 (SELECT num FROM t1);

retornar entre os somente valores determinados itens que não estejam

SELECT WHERE * num FROM NOT t2 IN (1, 2, 3);

88
88
entre os somente valores determinados itens que não estejam SELECT WHERE * num FROM NOT t2
Funções de informação do sistema ● versão e data/hora de inicío da instância SELECT pg_postmaster_start_time();

Funções de informação do sistema

versão e data/hora de inicío da instância

SELECT pg_postmaster_start_time(); version(), SELECT inet_client_addr(), inet_server_addr(), inet_client_port(); inet_server_port(), SELECT current_schema(), session_user, current_database(), user; current_user,

endereço IP e porta (servidor e cliente)

banco, esquema e usuário atuais

89
89
e cliente) ● banco, esquema e usuário atuais 89 Funções – Exercício 3b ● criar seguintes
e cliente) ● banco, esquema e usuário atuais 89 Funções – Exercício 3b ● criar seguintes

Funções – Exercício 3b

criar seguintes a tabela campos: “boletos”, contendo os

– – cliente: linha: id: inteiro, caracter(24), inteiro, PK, default obrigatório, default = valor = default da seqüência = rand()

to_char(current_date current_time 'YYYYMMDDHH12MISS') + (rand()::text - rand() || + || 'sec')::interval, trim(to_char((random() repeat('0', 10))) * 1e5)::numeric(10,2),

2007 01 03 12 12 45 00000 684 84

ano

mês dia hora min seg

valor (2 decimais)

exemplo de linha 91
exemplo de linha
91
dia hora min seg valor (2 decimais) exemplo de linha 91 Funções – Exercício 3a ●
dia hora min seg valor (2 decimais) exemplo de linha 91 Funções – Exercício 3a ●

Funções – Exercício 3a

● ● alterar verificar criar a seqüência a sua numeração numeração “seq_boletos_id” inicial atual dela para 1001

criar e testar a função rand():

CREATE SELECT FUNCTION trunc(random()*100)::int rand() RETURNS int AS $$ SELECT $$ LANGUAGE rand(); sql;

90
90
RETURNS int AS $$ SELECT $$ LANGUAGE rand(); sql; 90 Funções – Exercício 3c ● popular
RETURNS int AS $$ SELECT $$ LANGUAGE rand(); sql; 90 Funções – Exercício 3c ● popular

Funções – Exercício 3c

popular a tabela “boletos” executando:

ALTER ADD dummy TABLE int; boletos INSERT SELECT INTO * FROM boletos generate_series(1, (dummy) 1000);

incluir os seguintes campos na tabela:

– – valor: dthr: data/hora, número decimal não obrigatório 10;2, não obrigatório

copiá-los extrair as funções os para valores de conversão “dthr” do campo e “valor”, de tipos “linha” utilizando de e dados

92
92
funções os para valores de conversão “dthr” do campo e “valor”, de tipos “linha” utilizando de
Funções – Exercício 3d ● listar valores os totais 10 “maiores” e ordenados clientes, de

Funções – Exercício 3d

listar valores os totais 10 “maiores” e ordenados clientes, de modo exibindo os

● ● decrescente exibir valores exibir dia 01 a o de dos menor média outubro boletos e e o o de desvio maior do 2010 mês valor padrão de de setembro dos boleto do

exibir esteja os na boletos tabela t1 cujo (campo código num), do cliente ordenando primeiros registros pelo id e desconsiderando os 10

93
93
primeiros registros pelo id e desconsiderando os 10 93 Antes de prosseguir o curso ● execute
primeiros registros pelo id e desconsiderando os 10 93 Antes de prosseguir o curso ● execute

Antes de prosseguir o curso

execute as seguintes instruções

CREATE id integer, TABLE produtos ( preco nome text, numeric CREATE CREATE ); TABLE TABLE bio contas (val ( int); id saldo serial numeric PRIMARY DEFAULT KEY, 0.0

);

95
95
id saldo serial numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com
id saldo serial numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com

Alterando dados

numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo
numeric PRIMARY DEFAULT KEY , 0.0 ); 95 Alterando dados Incluindo linhas com INSERT ● inserindo

Incluindo linhas com INSERT

inserindo uma linha por vez (ordenada)

INSERT VALUES INTO (1, produtos 'Queijo', 9.99);

especificando todas as colunas

boa prática!
boa prática!

INSERT INTO produtos (id, nome, preco) INSERT VALUES VALUES INTO ('Presunto', (2, produtos 'Manteiga', (nome, 7.55, 2.34); 3); preco, id)

omitindo determinadas colunas

INSERT VALUES INTO (4, produtos 'Amendocrem'); (id, nome)

● omitindo determinadas colunas INSERT VALUES INTO (4, produtos 'Amendocrem'); (id, nome) existe? ainda 96
existe? ainda 96
existe? ainda
96
● omitindo determinadas colunas INSERT VALUES INTO (4, produtos 'Amendocrem'); (id, nome) existe? ainda 96
Incluindo linhas com INSERT II ● PostgreSQL as preenchendo formas a (fora seguir com do

Incluindo linhas com INSERT II

PostgreSQL as preenchendo formas a (fora seguir com do valores são padrão extensões padrões ANSI SQL) do

INSERT INSERT VALUES INTO INTO (5, produtos produtos 'Mortadela', DEFAULT); DEFAULT VALUES; INSERT (6, 'Pão INTO Sírio', produtos 3.57), VALUES (7, 'Pão Francês', 0.28);

especificando diversas linhas de uma vez

só a partir da versão 8.2 97
só a partir da
versão 8.2
97
diversas linhas de uma vez só a partir da versão 8.2 97 Criando tabelas com o
diversas linhas de uma vez só a partir da versão 8.2 97 Criando tabelas com o

Criando tabelas com o SELECT

é possível criar uma tabela já populada

criando com base uma em tabela uma consulta com parte SQL! dos boletos

SELECT INTO bol_min id, cliente, dthr, valor FROM WHERE boletos dummy < 10;

cliente, dthr, valor FROM WHERE boletos dummy < 10; a tabela de ser destino temporária pode

a tabela de ser destino temporária pode

os campos da nova tabela têm o mesmo

atenção: são tipo criados de dados chaves com dos essa primárias que sintaxe! vêm e da índices consulta não

99
99
primárias que sintaxe! vêm e da índices consulta não 99 Incluindo linhas com SELECT ● é
primárias que sintaxe! vêm e da índices consulta não 99 Incluindo linhas com SELECT ● é

Incluindo linhas com SELECT

é consulta possível SQL! incluir linhas com base em uma

criando novos produtos

antes dica: “SELECT” somente execute o

novos produtos antes dica: “SELECT” somente execute o INSERT INTO produtos SELECT FROM

INSERT INTO produtos SELECT FROM (random()*10)::numeric(10,2) tabela; id + 10, initcap(des),

(random()*10)::numeric(10,2) tabela; id + 10, initcap(des), ● aumentando a população duplicada a tabela é a cada

aumentando a população

duplicada a tabela é a

cada execução

98
98

INSERT INTO bio INSERT SELECT INTO generate_series(1,10); bio SELECT * FROM bio;

INTO generate_series(1,10); bio SELECT * FROM bio; Incluindo linhas com COPY COPY FROM tablename {
INTO generate_series(1,10); bio SELECT * FROM bio; Incluindo linhas com COPY COPY FROM tablename {

Incluindo linhas com COPY

COPY FROM tablename { 'filename' [ ( column | STDIN [, }

altamente de muitos registros! recomendável para a inclusão

copiando pelo terminal

] )

]

finalizar com “\.”

● copiando pelo terminal ] ) ] finalizar com “\.” COPY produtos FROM stdin; COPY produtos

COPY produtos FROM stdin; COPY produtos FROM '/tmp/prod.dat';

copiando a partir de um arquivo

[tab] \N separador valor nulo de campos
[tab] \N
separador valor nulo de campos
a partir de um arquivo [tab] \N separador valor nulo de campos caminho absoluto: existir o

caminho absoluto:

existir o arquivo no servidor deve

100
100
a partir de um arquivo [tab] \N separador valor nulo de campos caminho absoluto: existir o
Gerando arquivos com COPY COPY TO { tablename 'filename' [ ( | column STOUT }

Gerando arquivos com COPY

COPY TO { tablename 'filename' [ ( | column STOUT } [,

útil linhas para de a uma exportação determinada rápida tabela de todas as

copiando para o terminal

] )

]

COPY produtos TO stdout; COPY produtos TO '/tmp/prod.dat';

copiando para um arquivo

TO '/tmp/prod.dat'; ● copiando para um arquivo caminho absoluto: deve de escrita haver no permissão

caminho absoluto:

deve de escrita haver no permissão servidor

101
101
absoluto: deve de escrita haver no permissão servidor 101 Alterando linhas com UPDATE ● aumentando em
absoluto: deve de escrita haver no permissão servidor 101 Alterando linhas com UPDATE ● aumentando em

Alterando linhas com UPDATE

aumentando em 10% o preço do queijo

UPDATE SET WHERE preco produtos id = = 1; 1.1 * preco

desconto de 5% em todos os produtos

UPDATE SET preco produtos = 0.95 * preco; UPDATE nome = produtos nome || SET ' ­ preco Oferta' = preco ­ 1.5, WHERE id IN (1, 3, 5);

cuidado com isso!
cuidado
com isso!

alterando várias colunas de uma vez

103
103
com isso! ● alterando várias colunas de uma vez 103 Trabalhando com o formato CSV ●
com isso! ● alterando várias colunas de uma vez 103 Trabalhando com o formato CSV ●

Trabalhando com o formato CSV

exportando para o formato CSV

COPY produtos TO stdout DELIMITER ';' CSV;

importando a partir de um arquivo CSV

$ cat > impcsv.sql << EOF

altere do esquema o nome
altere do esquema o nome

FROM 6;Maionese;3.45 COPY stdin esquema.produtos DELIMITER ';' CSV;

7;Catchup;2.96

EOF \.

não terminador esqueça “\.” do

7;Catchup;2.96 EOF \. não terminador esqueça “\.” do $ psql cursopg ­h scelepar05480 sa_cursopg <

$ psql cursopg ­h scelepar05480 sa_cursopg < impcsv.sql ­p 5432 \

102
102
­h scelepar05480 sa_cursopg < impcsv.sql ­p 5432 \ 102 Alterando linhas com UPDATE II ● a
­h scelepar05480 sa_cursopg < impcsv.sql ­p 5432 \ 102 Alterando linhas com UPDATE II ● a

Alterando linhas com UPDATE II

a sintaxe UPDATE

FROM

UPDATE SET FROM preco t1 produtos WHERE = 0.85 num * = preco id;

exibir registros após alteração

só a partir da versão 8.2
só a partir da
versão 8.2

UPDATE produtos WHERE SET preco id = = 2 1.05 RETURNING * preco id, preco;

sintaxe alternativa com lista de colunas

UPDATE SET (preco, produtos nome) = (preco, nome);

104
104
* preco id, preco; ● sintaxe alternativa com lista de colunas UPDATE SET ( preco, produtos
Excluindo linhas de uma tabela ● excluindo apenas determinadas linhas DELETE WHERE FROM id IS

Excluindo linhas de uma tabela

excluindo apenas determinadas linhas

DELETE WHERE FROM id IS produtos NULL;

com cuidado isso!
com cuidado isso!

excluindo todos os registros da tabela

DELETE FROM filmes;

para uma forma remover mais todas rápida, as linhas use o da TRUNCATE tabela de

TRUNCATE TRUNCATE TRUNCATE filmes, filmes filmes; CASCADE; distribuidores;

esvaziar cascata em 105
esvaziar cascata em
105
filmes; CASCADE ; distribuidores; esvaziar cascata em 105 Alterando dados – Exercício 2 ● aumente “bio”
filmes; CASCADE ; distribuidores; esvaziar cascata em 105 Alterando dados – Exercício 2 ● aumente “bio”

Alterando dados – Exercício 2

aumente “bio” para o cerca número de de 1 milhão linhas da tabela

execute a instrução a seguir

SELECT FROM bio count(1) GROUP as BY qtd, val ORDER val BY 2;

val possível exclua seja somente igual a 2, os da registros maneira cujo mais campo rápida

dica: TRUNCATE use os e comandos INSERT SELECT INTO SELECT INTO,

107
107
use os e comandos INSERT SELECT INTO SELECT INTO, 107 Alterando dados – Exercício 1 ●
use os e comandos INSERT SELECT INTO SELECT INTO, 107 Alterando dados – Exercício 1 ●

Alterando dados – Exercício 1

popule instrução a tabela SQL de “contas” consulta com a seguir base na

SELECT valor DISTINCT AS saldo, ON (cliente) cliente AS id FROM WHERE boletos cliente <= 10;

identificação aumente em 5% seja o um saldo número das contas ímpar cuja

cujo “t2” exclua, (campo número com um num) esteja só comando, presente na as tabela contas

106
106
exclua, (campo número com um num ) esteja só comando, presente na as tabela contas 106
exclua, (campo número com um num ) esteja só comando, presente na as tabela contas 106

Controle de transações

exclua, (campo número com um num ) esteja só comando, presente na as tabela contas 106
exclua, (campo número com um num ) esteja só comando, presente na as tabela contas 106
exclua, (campo número com um num ) esteja só comando, presente na as tabela contas 106
exclua, (campo número com um num ) esteja só comando, presente na as tabela contas 106
exclua, (campo número com um num ) esteja só comando, presente na as tabela contas 106
exclua, (campo número com um num ) esteja só comando, presente na as tabela contas 106
exclua, (campo número com um num ) esteja só comando, presente na as tabela contas 106
exclua, (campo número com um num ) esteja só comando, presente na as tabela contas 106