Skip to content

Instantly share code, notes, and snippets.

@jonathanalves
Last active April 11, 2021 16:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jonathanalves/d7669ff9c7a29817c2ff975fcf93c42f to your computer and use it in GitHub Desktop.
Save jonathanalves/d7669ff9c7a29817c2ff975fcf93c42f to your computer and use it in GitHub Desktop.
ALTER TABLE indicador_pessoal_versao DROP CONSTRAINT uk_2s3c25we0a91ejyy5moa8623j;
update indicador_pessoal_versao
set hashcode = md5(CONCAT_WS(';',
coalesce(indicador_Pessoal_Id::varchar, '')
, coalesce(nome, '')
, coalesce(documento, '')
, coalesce(documento_Desconhecido::varchar, '')
, coalesce(denominacao, '')
, coalesce(rg, '')
, coalesce(cnh, '')
, coalesce(cip, '')
, coalesce(passaporte, '')
, coalesce(inscricao_Municipal, '')
, coalesce(outros_Documentos, '')
, coalesce(profissao, '')
, coalesce(nome_Pai, '')
, coalesce(nome_Mae, '')
, coalesce(to_char(nascimento, 'yyyy-MM-dd'), '')
, coalesce(sexo, '')
, coalesce(nacionalidade, '')
, coalesce(cep, '')
, coalesce(estado, '')
, coalesce(cidade, '')
, coalesce(bairro, '')
, coalesce(quadra, '')
, coalesce(lote, '')
, coalesce(logradouro, '')
, coalesce(numero, '')
, coalesce(complemento, '')
, coalesce(pais, '')
, coalesce(cep_Comercial, '')
, coalesce(estado_Comercial, '')
, coalesce(cidade_Comercial, '')
, coalesce(bairro_Comercial, '')
, coalesce(quadra_Comercial, '')
, coalesce(lote_Comercial, '')
, coalesce(logradouro_Comercial, '')
, coalesce(numero_Comercial, '')
, coalesce(complemento_Comercial, '')
, coalesce(pais_Comercial, '')
, coalesce(conjuge_id::varchar, '')
, coalesce(estado_Civil, '')
, coalesce(regime_Casamento, '')
, coalesce(to_char(data_casamento, 'yyyy-MM-dd'), '')
, coalesce(detalhes_Regime, '')
, coalesce(casamento_Apos_Lei6515::varchar, '')
, coalesce(possui_Uniao_Estavel::varchar, '')
, coalesce(possui_Participacao_Estrangeira::varchar, '')
, coalesce(exposta_Politicamente::varchar, '')
, coalesce(falecido::varchar, '')
, coalesce(menor::varchar, '')
));
CREATE MATERIALIZED VIEW IF NOT EXISTS migracao.duplicados as
select hashcode, indicador_pessoal_id
from indicador_pessoal_versao ip
group by hashcode, indicador_pessoal_id having count(*) > 1
----------------------
with versoes as (
select
distinct on (indicador_pessoal_id) indicador_pessoal_id, id, atualizacao, cadastro, versao
from indicador_pessoal_versao
order by indicador_pessoal_id, atualizacao desc nulls last, cadastro desc nulls last, versao desc nulls last
)
update indicador_pessoal set versao_atual_id = v.id from versoes v where indicador_pessoal.id = v.indicador_pessoal_id;
----------------------
drop MATERIALIZED VIEW IF EXISTS migracao.pessoas cascade;
CREATE MATERIALIZED VIEW IF NOT EXISTS migracao.pessoas as
SELECT distinct indicador_pessoal_versao_id pessoa
FROM ato_envolvido
union
SELECT distinct procurador_id pessoa
FROM ato_envolvido
union
SELECT distinct solicitante_id
FROM protocolo
union
SELECT distinct tomador_id
FROM protocolo
union
SELECT distinct interessado_id
FROM protocolo
union
SELECT distinct solicitante_id
FROM indisponibilidade_ordem
union
SELECT distinct indicador_pessoal_versao_id
FROM documentacao_envolvido
union
SELECT distinct indicador_pessoal_versao_id
FROM ocorrencia_envolvido
union
SELECT distinct indicador_pessoal_versao_id
FROM notificacao_envolvido
union
SELECT distinct indicador_pessoal_versao_id
FROM oficio_envolvido
union
SELECT distinct indicador_pessoal_versao_id
FROM documentacao_envolvido
union
SELECT distinct indicador_pessoal_versao_id
FROM indicador_real_proprietario
union
SELECT distinct indicador_pessoal_versao_id
FROM indicador_real_restricao
union
SELECT distinct indicador_pessoal_versao_id
FROM registro_auxiliar_restricao
union
SELECT distinct indicador_pessoal_versao_id
FROM registro_auxiliar_envolvido
union
SELECT distinct indicador_pessoal_versao_id
FROM nota_fiscal
union
SELECT distinct conjuge_id
FROM indicador_pessoal_versao
union
SELECT distinct versao_atual_id
FROM indicador_pessoal
union
SELECT distinct indicador_pessoal_versao_id
FROM ato_matricula_virtual
union
SELECT distinct fornecedor_id
FROM lancamento;
create index pessoas_usadas on migracao.pessoas(pessoa);
drop MATERIALIZED VIEW IF EXISTS migracao.pessoas_nao_usadas cascade;
CREATE MATERIALIZED VIEW IF NOT EXISTS migracao.pessoas_nao_usadas as
SELECT id, nome, documento, indicador_pessoal_id
FROM indicador_pessoal_versao ipv
WHERE NOT exists (
SELECT 1
FROM migracao.pessoas where pessoa = ipv.id
)
limit 1000;
------------
DO $$
declare
execu record;
linha record;
pos int;
begin
pos := 1;
FOR execu IN
SELECT id FROM usuario
loop
FOR linha IN
SELECT id FROM migracao.pessoas_nao_usadas
loop
RAISE NOTICE 'deletando id = % - %',linha.id,pos;
pos := pos + 1;
EXECUTE 'DELETE FROM indicador_pessoal_versao where id = ''' || linha.id || '''';
COMMIT;
END LOOP;
REFRESH MATERIALIZED VIEW migracao.pessoas;
REFRESH MATERIALIZED VIEW migracao.pessoas_nao_usadas;
END LOOP;
END$$;
delete
from indicador_pessoal
where not exists (select 1 from indicador_pessoal_versao where indicador_pessoal_id = indicador_pessoal.id)
and not exists (select 1 from indisponibilidade where indicador_pessoal_id = indicador_pessoal.id )
and not exists (select 1 from socio where indicador_pessoal_id = indicador_pessoal.id )
-----------------------------------
DO $$
declare
execu record;
linha record;
pos int;
begin
pos := 1;
FOR execu IN
SELECT id FROM usuario
loop
FOR linha IN
SELECT id FROM migracao.pessoas_nao_usadas
loop
RAISE NOTICE 'deletando id = % - %',linha.id,pos;
pos := pos + 1;
BEGIN
EXECUTE 'DELETE FROM indicador_pessoal_versao where id = ''' || linha.id || '''';
COMMIT;
EXCEPTION
WHEN others THEN
-- we ignore the error
END;
END LOOP;
REFRESH MATERIALIZED VIEW migracao.pessoas;
REFRESH MATERIALIZED VIEW migracao.pessoas_nao_usadas;
END LOOP;
END$$;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment