Gostaria de poder gerar bytea
campos aleatórios de comprimento arbitrário (<1 Gb) para preencher dados de teste.
Qual a melhor maneira para fazer isto?
Gostaria de poder gerar bytea
campos aleatórios de comprimento arbitrário (<1 Gb) para preencher dados de teste.
Qual a melhor maneira para fazer isto?
Aprimorando a resposta de Jack Douglas para evitar a necessidade de loop PL/PgSQL e concatenação bytea, você pode usar:
É uma função simples
SQL
que é mais barata de chamar do que PL/PgSQL.A diferença de desempenho devido ao método de agregação alterado é imensa para
bytea
valores maiores. Embora a função original seja até 3x mais rápida para tamanhos < 50 bytes, esta escala muito melhor para valores maiores.Ou use uma função de extensão C :
Eu implementei um gerador de bytea aleatório como uma função de extensão C simples. Está no meu repositório de scrapcode no GitHub . Veja o README lá.
Isso destrói o desempenho da versão SQL acima:
Esta função fará isso, mas 1Gb levará muito tempo porque não escala linearmente com o comprimento da saída:
teste de saída:
dbfiddle aqui
A extensão pgcrypto tem
gen_random_bytes(count integer)
:O
create extension
só precisa ser feito uma vez.