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
