Tenemos este par de disparadores y funciones que usamos en nuestra base de datos psql durante más tiempo. Básicamente, el disparador se llama cada vez que hay un nuevo registro en la tabla principal y cada fila se inserta en la partición mensual de forma individual. A continuación se muestra la función de activación:

CREATE TRIGGER partition_mic_teams_endpoint_trg1 
  BEFORE INSERT ON "mic_teams_endpoint" 
FOR EACH ROW EXECUTE 
PROCEDURE trg_partition_mic_teams_endpoint('month');

La función que tenemos crea particiones mensuales basadas en un campo de marca de tiempo en cada fila.

Tengo dos preguntas:

  • Elemento de lista Incluso si trato de COPIAR un montón de filas de CSV a la tabla principal, ¿este activador / función insertará cada fila individualmente? ¿Es esto eficiente?

  • Si ese es el caso, ¿es posible tener soporte para copiar datos a particiones en lugar de INSERT.

Gracias

Nota: lo siento si no proporcioné suficiente información para una respuesta

0
Arda Savran 23 oct. 2020 a las 05:51

1 respuesta

La mejor respuesta

Sí, se llamará a un activador de nivel de fila para cada fila por separado, y eso hará que COPY sea un poco más lento.

Una cosa que podría probar es un activador de nivel de declaración AFTER que use una tabla de transición, para que pueda

INSERT INTO destination SELECT ... FROM transition_table;

Eso debería ser más rápido, pero debería probarlo para estar seguro.

Consulte la documentación para obtener más detalles.

0
Laurenz Albe 23 oct. 2020 a las 06:16