COPY - LROCHA.com

Propaganda
BANCO DE DADOS WEB
AULA 11
manipulação de dados
inserção de registros
professor Luciano Roberto Rocha
www.lrocha.com
Manipulação de dados
Uma vez criada toda a estrutura de dados por meio dos
comandos da sub-linguagem DDL, pode-se proceder a manipulação
dos dados propriamente dita com o uso dos comandos DML (Data
Manipulation Language).
As operações básicas do subconjunto DML são:
Inserção de dados em tabelas (INSERT)
Atualização dos valores de um registro (UPDATE)
Exclusão de valores de uma tabela (DELETE)
Consulta de dados (SELECT)
2
Inserção de dados (INSERT)
A primeira ação a ser realizada para o banco de dados ter
utilidade é inserir dados.
Conceitualmente, os dados são inseridos uma linha de cada vez.
É claro que é possível inserir mais de uma linha, mas não existe
maneira de inserir menos de uma linha por vez. Mesmo que se
conheça apenas o valor de algumas colunas, deve ser criada uma
linha completa.
Para criar uma linha é utilizado o comando INSERT. Este comando
requer o nome da tabela, e um valor para cada coluna da tabela.
3
Inserção de dados
INSERT INTO: insere uma nova linha em uma tabela.
Um exemplo de comando para inserir uma linha é:
INSERT INTO produtos VALUES (1, 'Queijo', 9.99);
Os valores dos dados são colocados na mesma ordem que as
colunas se encontram na tabela, separados por vírgula.
A sintaxe mostrada acima tem como desvantagem ser necessário
conhecer a ordem das colunas da tabela. Para evitar isto, as colunas
podem ser relacionadas explicitamente.
INSERT INTO produtos (cod_prod, nome, preco) VALUES
(1, 'Queijo', 9.99);
INSERT INTO produtos (nome, preco, cod_prod) VALUES
4
('Queijo', 9.99, 1);
Inserção de dados
Muitos usuários consideram boa prática escrever sempre os nomes das colunas.
Se não forem conhecidos os valores de todas as colunas, as colunas com valor
desconhecido podem ser omitidas. Neste caso, estas colunas são preenchidas
com seu respectivo valor padrão. Por exemplo:
INSERT INTO produtos (cod_prod, nome) VALUES (1, 'Queijo');
INSERT INTO produtos VALUES (1, 'Queijo');
A segunda forma é uma extensão do PostgreSQL, que preenche as colunas a
partir da esquerda com quantos valores forem fornecidos, e as demais com o
valor padrão.
Para ficar mais claro, pode ser requisitado explicitamente o valor padrão da
coluna individualmente, ou para toda a linha:
INSERT INTO produtos (cod_prod, nome, preco) VALUES (1,
'Queijo', DEFAULT);
INSERT INTO produtos DEFAULT VALUES;
5
Inserção de dados (COPY)
Podemos usar o comando COPY para carregar todas as linhas em
um comando, em vez de usar uma série de comandos INSERT.
O comando COPY é otimizado para carregar uma grande quantidade
de linhas; é menos flexível que o comando INSERT, mas ocasiona
uma sobrecarga significativamente menor para cargas de dados
volumosas.
COPY: Copia dados entre um arquivo e uma tabela
6
Inserção de dados (COPY)
Sinopse
COPY nome_da_tabela [ ( coluna [, ...] ) ] FROM
{ 'nome_do_arquivo' | STDIN } [ [ WITH ]
[ BINARY ] [ OIDS ] [ DELIMITER [ AS ] 'delimitador'
] [ NULL [ AS ] 'cadeia_de_caracteres_nula' ] [ CSV
[ QUOTE [ AS ] 'demarcador' ]
[ ESCAPE [ AS ] 'escape' ] [ FORCE NOT NULL coluna
[, ...] ]
COPY nome_da_tabela [ ( coluna [, ...] ) ] TO
{ 'nome_do_arquivo' | STDOUT } [ USING ]
[ BINARY ] [ OIDS ] [ DELIMITER [ AS ] 'delimitador'
] [ NULL [ AS ] 'cadeia_de_caracteres_nula' ] [ CSV
[ QUOTE [ AS ] 'demarcador' ]
[ ESCAPE [ AS ] 'escape' ] [ FORCE QUOTE coluna
[, ...] ]
7
Inserção de dados (COPY)
Descrição
O comando COPY copia dados entre tabelas do PostgreSQL e
arquivos do sistema operacional.
O comando COPY TO copia o conteúdo de uma tabela para um
arquivo, enquanto o comando COPY FROM copia dados de um
arquivo para uma tabela (adicionando os dados aos já existentes
na tabela).
Se for especificada uma lista de colunas, o comando COPY
somente copia os dados das colunas especificadas de/para o
arquivo.
Havendo colunas na tabela que não estejam na lista de colunas,
o comando COPY FROM insere o valor padrão destas colunas.
8
Inserção de dados (COPY FROM)
Exemplos
Copiar o conteúdo do arquivo “estados.sql” para a tabela estados:
COPY estados FROM ‘/User/Shared/estados.sql’
WITH DELIMITERS ‘,’WITH NULL AS '\null';
Os dados no arquivo deverão possuir essa estrutura:
1,28,AC,Acre
2,28,AL,Alagoas
3,28,AP,Amapá
4,28,AM,Amazonas
5,28,BA,Bahia
6,28,CE,Ceará
7,28,DF,Distrito Federal
9
Inserção de dados (COPY TO)
Exemplos
Copiar os dados da tabela estados para o arquivo “estados.sql”:
COPY estados TO ‘/User/Shared/estados.sql’
WITH DELIMITERS ‘,’WITH NULL AS '\null';
COPY estados TO ‘/User/Shared/estados.sql’;
Se o delimitador for ocultado como no segundo exemplo o arquivo
será gerado com os dados separados pelo caracter de tabulação em
ASCII por padrão.
Para recuperar os dados separados com esse caracter devemos
utilizar ‘\t’ como opção na instrução WITH DELIMITERS.
10
Inserção de dados (COPY)
Importante
O comando COPY TO termina cada linha pelo caractere de novalinha (“\n”), no estilo Unix. Os servidores executando no Microsoft
Windows em vez disto geram retorno-de-carro/nova-linha (“\r\n”),
mas somente no COPY para um arquivo no servidor;
O comando COPY FROM consegue tratar linhas terminando por
nova-linha, retorno-de-carro, ou retorno-de-carro/nova-linha.
Para reduzir o risco de erro devido a caracteres de nova-linha ou
de retorno-de-carro sem contrabarra que fazem parte dos dados, o
COPY FROM reclama se o final de todas as linhas de entrada não
forem idênticos.
11
Referências
Para saber mais consulte:
Documentação oficial do PostgreSQL traduzida - pág. 736
Documentação oficial on-line:
http://pgdocptbr.sourceforge.net/pg80/sql-copy.html
h t t p : / / w w w. c o m m a n d p r o m p t . c o m / p p b o o k /
x5504#COPYINGTHEBOOKSTABLETOASCII (em inglês)
12
Download