quarta-feira, outubro 26, 2011

PostgreSql: PgScript - Criando massa de dados

Este post, embora não seja especificamente de Java, como o nome do blog sugere, mas por certo será de grande utilidade para todos, haja vista que o uso de SGBDs está implicito na tarefa de desenvolvimento, seja com Java (espero que seja sempre com Java) ou em qualquer outra linguagem.

A geração de massa de dados é muito importante para que testemos o sistema num quantitativo de registros significante, e assim, mensurar o desempenho aproximado do ambiente de produção. Muitas são as formas de gerar tal massa de dados, mas manter o relacionamento em tal geração geralmente requer certo trabalho.

Para usuários do PostgreSql, este dispõe em sua ferramenta de administração, o pgAdminIII, o recurso chamado de pgScript. Utilizando-se deste recurso, a geração de tal massa de dados é feita dentro do ambiente do SGBD, o que otimiza a manutenção dos relacionamentos e tempo demandado para a elaboração da rotina.

Vamos considerar a seguinte modelagem para o exemplo de geração:
 Tem-se o script de criação:
create table autor(
id_autor serial,
nome  varchar(50),
sexo  varchar(1),
primary key (id_autor));


create table livro (
id_livro serial,
id_autor integer,
titulo  varchar(45),
editora  varchar(45),
isbn  varchar(45),
edicao  varchar(45),
data_publicacao date,
preco_venda numeric,
primary key (id_livro),
foreign key (id_autor) references autor (id_autor));

CONCEITOS pgSCRIPT

Atribuição:
set @varName = value;
Printar valor:
print @varName;
Controladores de fluxo:
if, while
Geração aleatória de dados: 
Exemplos:
  • gerar inteiros aleatórios entre 1 e 999:
set @inteiro = integer(1,999);
  • gerar um valor textual com 3 "palavras" entre 5 e 10 caracteres:
set @texto = string(5,10,3);

Tomando a modelagem exposta acima, entende-se que um autor pode ter vários livros. Simularemos a inserção de 200 autores relacionando cada um com 100 livros, para tanto, no console do pgAdmin, criamos:
set @idAutor = 1;
set @idAutor = 1;
set @nome = string(5,11,3); -- 3 palavras entre 5 e 11 caracteres;
set @sexo = string(1,1);

--variáveis para inserção em livro
set @titulo = string(3,10,3);
set @editora = string(6,15,2);
set @isbn = string(20,20,1);
set @edicao = string(1,8,2);
set @dataPublicacao = date('01/01/1990', '26/10/2011');
set @preco = real(9,200,2);

while @idAutor <= 200
begin
 insert into autor (id_autor, nome, sexo)
 values ('@idAutor', '@nome', '@sexo');

 set @contLivros = 0;

 while @contLivros < 100
 begin
  insert into livro (id_autor, titulo, editora, isbn, edicao, data_publicacao, preco_venda)
  values('@idAutor', '@titulo', '@editora', '@isbn', '@edicao', '@dataPublicacao', '@preco');

  set @contLivros = @contLivros + 1;
 end

 set @idAutor = @idAutor + 1;
end


Neste momento nossa massa de dados para autores e livros está pronta, repare que a inserção é realizada de modo a fazer uso da relação 1:N entre autor e livro. Constituído o script, pressione o botão "Execute pgScript" ou tecle <<F6>>. Você verificará o console executar os scripts:
Observe que com o uso do pgScript, integrado nativamente ao pgAdminIII, este proporciona grande agilidade no desenvolvimento para a geração de massa de dados. Outras alternativas para tal geração, por certo demandam maior trabalho e tempo de configuração. A grande vantagem do se usar o pgScript, é poder manter o relacionamento na tarefa de inserção.

Espero que tenham gostado!

4 comentários:

  1. Conhece o Andrei? Ele tava fazendo um treco pra gerar massa de dados automaticamente. Você diz que tabela quer gerar massa, o programa identifica os tipos dos campos, relacionamentos, toda essa parafernália e faz a "mágica".

    ResponderExcluir
  2. Opa legal heim!? Quando tiver pronto, ficaria legal um post, caso exponha o sistema.

    ResponderExcluir
  3. Muito bom o Post, eu estava procurando algo nesse sentido, criar uma massa de dados para teste para tentar identificar alguns pontos de melhoria de performance.

    ResponderExcluir