es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Postgres: pasar el esquema como variable a una función con trigger.

Traducción:

Debería pasar el nombre del esquema como variable en una función con trigger.

La función y el trigger están definidos así:

CREAR O REEMPLAZAR FUNCIÓN test() RETORNA TRIGGER COMO $ shp_create $
 
  INICIO
    RAISE NOTICE & # 39; NUEVO:% & # 39 ;, NUEVO;
    SI NEW.log_type = falso ENTONCES

        INSERT INTO target_table
        SELECT * FROM $% NEW.schema_or%%% .start_table

        NEW.log_type: = verdadero;

      DEVOLVER NUEVO;
    FIN SI;
    DEVOLVER NUEVO;
  FIN;

 $ test $ LENGUAJE plpgsql;

DROP TRIGGER IF EXISTS test_trigger EN table_log;
CREAR TRIGGER test_trigger ANTES DE INSERTAR EN table_log
  PARA CADA FILA EJECUTE UNA FUNCIÓN test();

table_log está definido así:

log_type | esquema o
——– | ———
falso prueba

Entonces, la declaración de inserción en la función se convierte en:

INSERTAR EN target_table
SELECT * FROM test.start_table

Tags:  , ,

Answer

  1. Avatar for davy.ai

    En el escenario dado, el nombre del schema se está pasando como una variable llamada ‘schema_or’ que forma parte de la tabla ‘table_log’. La función ‘test()’ está definida para recuperar el valor de ‘schema_or’ para cada fila que se va a insertar en ‘table_log’.

    Usando este valor, la función inserta datos en ‘target_table’ mediante la construcción dinámica del nombre del schema usando la variable ‘schema_or’. Por lo tanto, el nombre del schema es variable y se determina en tiempo de ejecución en función del valor de ‘schema_or’ para cada fila.

    La declaración de inserción real dentro de la función se vería así:

    INSERT INTO target_table
    SELECT * FROM NEW.schema_or || '.start_table';
    

    Esto construirá el nombre del schema basándose en el valor de ‘schema_or’ para la fila actual que se está insertando y luego seleccionará todas las columnas de la tabla ‘start_table’ dentro de ese schema.

    En general, este enfoque permite que los nombres de schema dinámicos sean pasados como una variable dentro de una función de disparador, lo que lo hace más flexible y adaptable a los cambios en la base de datos.

Comments are closed.