sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo llenar las claves externas de una tabla de otras tablas

Esto se puede simplificar a:

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

Agregué un ORDER BY cláusula que no necesita estrictamente, pero ciertas consultas pueden beneficiarse si inserta sus datos agrupados de esa manera (o de alguna otra).

Si desea evitar perder filas donde no puede encontrar una fila coincidente en language o template , hazlo LEFT JOIN en lugar de JOIN para ambas tablas (siempre que language_id y template_id puede ser NULL .

Además de lo que ya enumeré en la precuela de preguntas :si INSERT es enorme y constituye una gran proporción de la tabla de destino, probablemente sea más rápido DROP todos los índices en la tabla de destino y volver a crearlos después. Crear índices desde cero es mucho más rápido que actualizarlos de forma incremental para cada fila.

Los índices únicos también sirven como restricciones, por lo que tendrá que considerar si aplicar las reglas más tarde o dejarlas en su lugar.