PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como preencher as chaves estrangeiras de uma tabela de outras tabelas


Isso pode ser simplificado para:
INSERT INTO translation (id, translated, language_id, template_id)
SELECT tmp.id, tmp.translated, l.id, t.id
FROM   tmp_table tmp
JOIN   language l USING (langname)
JOIN   template t USING (tplname, source, domain)
ORDER  BY tmp.id

Eu adicionei um ORDER BY cláusula que você não precisa estritamente, mas certas consultas podem lucrar se você inserir seus dados agrupados dessa maneira (ou de alguma outra).

Se você quiser evitar a perda de linhas em que não consegue encontrar uma linha correspondente em language ou template , torne-o LEFT JOIN em vez de JOIN para ambas as tabelas (desde que language_id e template_id pode ser NULL .

Além do que já listei na pergunta anterior :se o INSERT for enorme e constituir uma grande proporção da tabela de destino, provavelmente será mais rápido DROP todos os índices na tabela de destino e recriá-los depois. Criar índices do zero é muito mais rápido do que atualizá-los incrementalmente para cada linha.

Índices exclusivos também servem como restrições, portanto, você terá que considerar se deve aplicar as regras posteriormente ou deixá-las em vigor.