29
Introdu¸c˜ ao pgScript Exemplificando Finalizando Um Elefante de barriga cheia Dickson S. Guedes [email protected] FISL Porto Alegre, 2009 26 de junho de 2009 Um Elefante de barriga cheia FISL Porto Alegre, 2009

pgScript: um Elefante de barriga cheia

Embed Size (px)

DESCRIPTION

Alimentando Bases de dados PostgreSQL com pgScript. Palestra ministrada no FISL 2009.

Citation preview

Page 1: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Um Elefante de barriga cheia

Dickson S. [email protected]

FISL Porto Alegre, 2009

26 de junho de 2009

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 2: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

O que sera abordado...

IntroducaoGeracao de DadosFerramentas especializadas

pgScriptSobre o pgScriptFuncionalidades do pgScript

ExemplificandoVariaveis, Registros e SaıdaCondicoesGerando dados aleatorios

Finalizando

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 3: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Geracao de Dados

Ciclo de vida do desenvolvimento

I Analise

I Modelagem

I Desenvolvimento

I Teste

I Suporte e Manutencao

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 4: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Geracao de Dados

Solucoes manuais (?)

I INSERT INTO ... VALUES ...

I ctrl+c ctrl+v

I para os amantes do vim: v y p

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 5: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Geracao de Dados

Solucoes via ferramentas auxiliares

I BrOffice Planilha

I Exportacao em CSV

I sed, awk, ...

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 6: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Geracao de Dados

Solucoes via linguagens de programacao

I c, c++, ...

I perl, python, ruby, java, ...

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 7: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Geracao de Dados

Solucoes baseadas em banco de dados

I pl/pgsql

I INSERT INTO ... SELECT ...

I random(), generate series()

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 8: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Ferramentas especializadas

Solucoes Proprietarias

I EMS Data Generator for PostgreSQL

I DTM Data Generator

I GS Data Generator

I DB Data Generator

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 9: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Ferramentas especializadas

Solucoes Livres

I dbgen (TPC-H)

I GenerateData.com (Web, Java)

I Data::Faker (Perl)

I datagen,faker (Ruby)

I DBMonster,dgMaster (Java)

I pgScript (C++)

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 10: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Sobre o pgScript

Sobre o pgScript

I Google Summer of Code 2008

I pgUnitTest

I pgScript

I Criado por Mickael Deloison

I Integrado ao pgAdminIII

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 11: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Funcionalidades do pgScript

Variaveis

I DECLARE @variavel e opcional

I Atribuicao com SET @variavel = valor

I PRINT @variavel

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 12: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Funcionalidades do pgScript

Controle de Fluxo

I Teste de Condicao: IF

I Estrutura de Laco: WHILE

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 13: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Funcionalidades do pgScript

Gerando dados aleatorios

I INTEGER ( min, max, [sequence], [seed] );

I REAL ( min, max, precision, [sequence], [seed] );

I DATE ( min, max, [sequence], [seed] );

I TIME ( min, max, [sequence], [seed] );

I DATETIME ( min, max, [sequence], [seed] );

I STRING ( min, max, [nb], [seed] );

I REGEX ( regex, [seed] );

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 14: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Funcionalidades do pgScript

Gerando dados aleatorios

I INTEGER ( min, max, [sequence], [seed] );

I REAL ( min, max, precision, [sequence], [seed] );

I DATE ( min, max, [sequence], [seed] );

I TIME ( min, max, [sequence], [seed] );

I DATETIME ( min, max, [sequence], [seed] );

I STRING ( min, max, [nb], [seed] );

I REGEX ( regex, [seed] );

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 15: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Funcionalidades do pgScript

Gerando dados aleatorios

I INTEGER ( min, max, [sequence], [seed] );

I REAL ( min, max, precision, [sequence], [seed] );

I DATE ( min, max, [sequence], [seed] );

I TIME ( min, max, [sequence], [seed] );

I DATETIME ( min, max, [sequence], [seed] );

I STRING ( min, max, [nb], [seed] );

I REGEX ( regex, [seed] );

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 16: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Funcionalidades do pgScript

Gerando dados aleatorios especiais

I FILE ( path, [sequence], [seed], [encoding] );

I REFERENCE ( table, column, [sequence], [seed] );

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 17: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Variaveis, Registros e Saıda

Um script simples

DECLARE @R { @nome, @sobrenome, @email };

SET @R[0][’@nome’] = ’Dickson’;SET @R[0][’@sobrenome’] = ’Guedes’;SET @R[0][’@email’] = ’guedes at guedesoft dot net’;

PRINT @R[0][’@nome’];PRINT @R[0][1];

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 18: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Variaveis, Registros e Saıda

Um script simples - Resultado

[PGSCRIPT ] Dickson[PGSCRIPT ] Guedes

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 19: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Condicoes

Testando condicoes

SET @total_teste=SELECT count(*) as t FROM teste;

PRINT @total_teste;PRINT @total_teste[0][0];

IF CAST(@total_teste AS INTEGER) < 4BEGINPRINT ’Total de registros e menor que 4!’;

ENDELSEBEGINPRINT ’Total de registros e maior que 4!’;

END

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 20: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Condicoes

Testando condicoes - Resultado

[QUERY ] SELECT count(*) as t FROM teste[PGSCRIPT ] (5)[PGSCRIPT ] 5[PGSCRIPT ] Total de registros e maior que 4!

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 21: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Gerando dados aleatorios

Gerando strings aleatorias

SET @G = STRING(10, 20, 2);SET @A = @G; -- @A recebe uma string aleatoriaSET @B = @G; -- @B recebe *outra* string aleatoriaPRINT @G; -- Imprime uma terceira string aleatoriaPRINT @A; -- Imprime conteudo da variavel @APRINT @B; -- Imprime conteudo da variavel @B

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 22: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Gerando dados aleatorios

Um exemplo mais elaborado

CREATE TABLE tb_conta_corrente (id_conta serial PRIMARY KEY,descriao varchar(60),data_abertura date

);

CREATE TABLE tb_movimento_conta (id_movimento serial PRIMARY KEY,id_conta integer REFERENCES tb_conta_corrente(id_conta),data_hora_movimento timestamp,detalhe varchar(20),valor_movimento numeric(17,2)

);

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 23: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Gerando dados aleatorios

Criando o script no pgAdminIII - Declarando

SET @gen_descricao = STRING(10,20,3);SET @gen_data = DATE(’2000-01-02’,’2009-02-01’);SET @gen_data_hora = DATETIME(’2000-01-02 00:00:00’,’2009-04-01 00:00:00’);SET @gen_detalhe = REGEX(’[a-f]{10}[0-9]{10}’);SET @gen_valor = REAL(0.01,99999999.99,2);

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 24: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Gerando dados aleatorios

Criando o script no pgAdminIII - Inserindo

SET @i = 0;WHILE @i < 20BEGIN

INSERT INTO tb_conta_corrente(descricao, data_abertura)VALUES(’@gen_descricao’, ’@gen_data’);

SET @i = @i + 1;END

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 25: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Gerando dados aleatorios

Criando o script no pgAdminIII - Inserindo

SET @gen_id_conta =REFERENCE(’tb_conta_corrente’,’id_conta’);

SET @i = 0;WHILE @i < 10BEGIN

INSERT INTO tb_movimento_conta(id_conta, data_hora_movimento,

detalhe, valor_movimento)VALUES(@gen_id_conta, ’@gen_data_hora’,

’@gen_detalhe’, @gen_valor);SET @i = @i + 1;

END

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 26: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Gerando dados aleatorios

Saida do pgScript

INSERT INTO tb_conta_corrente (descricao, data_abertura)VALUES(’psGlh7NnfuqO9TdgZOG Ml1tqwVvLp9ByQpbRhZ YWNE08oCoj9U’,

’2007-07-05’)INSERT INTO tb_conta_corrente (descricao, data_abertura)VALUES(’gnb8g5Eqh47onb63na vL4aggsTcysvbOGVQ ir5CWsX7zBP’,

’2008-01-20’)INSERT INTO tb_conta_corrente (descricao, data_abertura)VALUES(’u2eK4E5k0UvEu5 aDeQfV9pvizSCdWn9p y1GG4efGI7BX8lkXF’, ’2002-06-01’)

INSERT INTO tb_conta_corrente (descricao, data_abertura)VALUES(’wbvHnHs9yj4GnO3WQVOW Lz9feLSUrk1fRHHNvCX s8MK3i0l49CpTN’, ’2006-12-05’)

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 27: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Gerando dados aleatorios

Saida do pgScript

INSERT INTO tb_movimento_conta (id_conta, data_hora_movimento, detalhe, valor_movimento)VALUES(336, ’2007-08-22 20:35:02’,

’efbeeaceef8827613869’, 8.26)INSERT INTO tb_movimento_conta (id_conta, data_hora_movimento, detalhe, valor_movimento)VALUES(360, ’2008-03-11 11:13:07’,

’fcacdedcbc8414665323’, 8.85)INSERT INTO tb_movimento_conta (id_conta, data_hora_movimento, detalhe, valor_movimento)VALUES(109, ’2002-06-17 01:35:00’, ’eafffdfcea7098959381’, 2.656489693E+7)

INSERT INTO tb_movimento_conta (id_conta, data_hora_movimento, detalhe, valor_movimento)VALUES(310, ’2007-01-19 01:28:32’, ’bfcedceddd1948647555’, 7.622237841E+7)

INSERT INTO tb_movimento_conta (id_conta, data_hora_movimento, detalhe, valor_movimento)VALUES(283, ’2006-06-06 10:54:03’, ’cbaaebeeac3201828714’, 6.951338185E+7)

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 28: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Questionamento

?

Um Elefante de barriga cheia FISL Porto Alegre, 2009

Page 29: pgScript: um Elefante de barriga cheia

Introducao pgScript Exemplificando Finalizando

Contato

I Dickson S. Guedes

I [email protected] (email, gtalk)

I guediz (skype)

I Guedes em irc.freenode.net #postgresql-br #postgresql

Um Elefante de barriga cheia FISL Porto Alegre, 2009