pgScript: um Elefante de barriga cheia

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

description

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

Transcript of pgScript: um Elefante de barriga cheia

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