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?
[]s
Danilo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral