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
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í:
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.