PostgreSQL - Inserir vários registros para testes

Muitas vezes quando estamos desenvolvendo, necessitamos de uma tabela populada no banco de dados para realizar alguns testes e dependendo da quantidade de registros torna-se um pouco inviável inserir um a um. Uma boa maneira de popular a tabela é utilizando uma função de geração em série.

Como exemplo, vamos criar a seguinte tabela:

CREATE TABLE funcionario
(
  id INTEGER,
  nome TEXT,
  nascimento DATE,
  funcao TEXT,
  salario NUMERIC(8, 2)
);

Agora a próxima instrução irá inserir 1000 (um mil) registros nessa tabela:

INSERT INTO
    funcionario
SELECT
    serie.id,
    'João',
    '1983-03-17',
    'Vendedor',
    2400.00
FROM
    generate_series(1, 1000) AS serie (id);

Também é possível gerar um valor randômico para alguns campos utilizando a função RANDOM.

Agora para exemplificar, iremos inserir mais 1000 (um mil) registros e para variar o uso da função de série, o id será gerado entre o intervalo de 1001 e 3000 alternando de 2 em 2:

INSERT INTO
    funcionario
SELECT
    serie.id,
    (string_to_array('João,Maria,José,Antônio', ','))[floor((random() * 4 + 1))],
    '01-01-1990'::DATE - (random() * ('01-01-1990'::DATE - '01-01-1970'))::INTEGER,
    (string_to_array('Vendedor,Gerente', ','))[floor((random() * 2 + 1))],
    floor(random() * 3000)
FROM
    generate_series(1001, 3000, 2) AS serie (id);

Consulte esse link do manual para mais detalhes do uso da função GENERATE_SERIES.

Comentários