Em 22 de agosto de 2014 21:50, Danilo Silva <[email protected]>
escreveu:

>
> Em 22 de agosto de 2014 21:43, Danilo Silva <[email protected]>
> escreveu:
>
> Pessoal,
>>
>> Possuo uma tabela de histórico de leitura, onde cada registro possui o id
>> da tabela pai:
>>
>> tabela_documento = tabela pai (contém os dados principais do objeto)
>> tabela_historico = historico de leituras (contém data, hora, origem e
>> destino de cada objeto).
>>
>> Resumindo, para cada registro na tabela pai, eu posso ter vários
>> registros na tabela de histórico.
>>
>> O meu problema está que por uma falha na programação, o sistema não
>> obedeceu essa regra, ficou no relacionamento 1 para 1.
>>
>> Preciso agora corrigir isso, pegar todos os registros da tabela de
>> histórico e atualizá-los com um único id da tabela pai correspondente.
>>
>> Pensei em utilizar a querie abaixo, onde eu monto o comando de update na
>> tabela de histórico e delete na tabela pai
>>
>> SELECT
>>     , 'UPDATE historico SET idpai =
>> '||split_part(string_agg(idpai::text,','),',',1)||' WHERE (idhistorico IN
>> ('||string_agg(idhistorico::text,',')||'));'
>>     , 'DELETE FROM tabela_pai WHERE (idpai IN
>> ('||string_agg(idpai::text,',')||')) AND (idpai <>
>> '||split_part(string_agg(idpai::text,','),',',1)||');'
>> FROM historico GROUP BY codempresa,codcliente,codproduto,codbarras HAVING
>> COUNT(*) > 1
>>
>> mas encontrei 2 problemas, o primeiro é a demora no select, cancelei o
>> select após 25 minutos (a tabela possui em torno de 980 mil registros), o
>> segundo é o limite de caracteres de retorno da função string_agg (retorna
>> parte dos códigos, pois no final fica "(...)".
>>
>> Vamos lá, existe uma forma melhor de executar o eu preciso?
>>
>> A função string_agg realmente possui essa limitação?
>>
>>
>> ​Pessoal esqueci de mencionar que executei a select no pgadmin, estive
> vendo pelo psql e parece que a limitação de caracteres da função string_agg
> não acontece, talvez seja alguma coisa do pgadmin.
>
>
> ​Pessoal,

Consegui executar o select através do comando COPY TO (levou 20s e retornou
16 mil registros), parece que a limitação foi mesmo com o pgadmin, pois a
função string_agg retornou todos os códigos.

[]s
Danilo ​
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a