Cómo configurar los desencadenantes de PostgreSQL

Cómo configurar los desencadenantes de PostgreSQL
"El disparador se usa en cualquier base de datos para realizar alguna tarea automatizada cuando aparece un evento de base de datos en particular. Se llama la función de devolución de llamada de la base de datos que se llama automáticamente en función del evento. Hay muchos beneficios de usar desencadenantes en la base de datos PostgreSQL. Se pueden crear tres tipos de desencadenantes, que se describen en este tutorial utilizando múltiples ejemplos."

Algunos beneficios de usar desencadenantes

  • La validación de datos se puede hacer fácilmente.
  • Se puede generar el valor único de un nuevo registro.
  • El desarrollo de aplicaciones se vuelve más rápido.
  • Las reglas comerciales de la aplicación se pueden hacer cumplir.
  • El mantenimiento de la aplicación se vuelve más fácil.

Sintaxis

La sintaxis de crear un gatillo se da a continuación.

Crear [o reemplazar] [restricción] nombre de activación antes | Después de | En lugar de evento [o ...]
En table_name
[De referenciado_table_name]
[No aplazable | [Aplazable] [inicialmente inmediato | Inicialmente diferido]]
[Referencia Old | Nueva tabla [as] transition_relation_name […]]
[Para [cada uno] fila | DECLARACIÓN ]
[Cuando (condición)]
Ejecutar function | Procedimiento function_name (argumentos)
  • Se utiliza la palabra clave Crear para crear un nuevo activador, y Reemplazar la palabra clave se usa para modificar un gatillo existente.
  • La opción de restricción se utiliza para crear un desencadenante de restricción que se dispara en función del valor de restricción.
  • Se utiliza un nombre de activación único para crear el gatillo.
  • Se pueden usar cuatro tipos de eventos para crear un desencadenante. Estos son insertar, actualizar, eliminar y truncar.
  • Tres tipos de desencadenantes que se pueden crear son ANTES, DESPUÉS, y EN LUGAR DE. Los desencadenantes se pueden crear para la mesa, la mesa extranjera y la vista. ANTES y DESPUÉS Los disparadores de soporte de soporte insertar, actualizar y eliminar operaciones para tabla y tabla extranjera en nivel de fila, y la vista también en nivel de declaración. EN LUGAR DE El activador es compatible con las operaciones de inserción, actualización y eliminación para ver solo en el nivel de fila. El evento truncado se puede usar solo para la tabla a nivel de declaración.
  • Después de definir el evento, se utiliza el nombre de la tabla o la tabla o vista extranjera para el cual se creará el activador.
  • El referenciado_table_name se usa para la restricción de clave extranjera y solo el desencadenante de restricción.
  • El momento predeterminado del disparador se define por No aplazable o Aplazable o Inicialmente inmediato o Inicialmente diferido.
  • Referencia La palabra clave se usa para declarar uno o dos nombres de relaciones.
  • Mesa vieja o Nuevo TABLa cláusula E define la relación de transición antes de imagen o la relación de transición posterior a la imagen.
  • transición_relation_name se usa dentro del disparador para la relación de transición.
  • POR CADA FILA o Para cada declaración Define si la función de activación debe dispararse una vez por cada fila afectada por el evento de activación o simplemente una vez por declaración SQL. Para cada declaración es el valor predeterminado.
  • condición determina si la función de activación se ejecutará o no.
  • nombre de la función es una función definida por el usuario que no toma argumento, y el tipo de retorno es el disparador que se ejecuta cuando el disparador se dispara.
  • La lista de argumentos separados por comas se pasa a la función cuando se ejecuta el disparador.

Requisitos previos

A. Instale el PostgreSQL

Debe instalar la última versión de los paquetes PostgreSQL en el sistema operativo Linux antes de ejecutar las declaraciones SQL que se muestran en este tutorial. Ejecute los siguientes comandos para instalar e iniciar el PostgreSQL:

$ sudo apt-get -y instalación postgresql postgresql-contrib
$ sudo systemctl iniciar postgresql.servicio

B. Ejecute el siguiente comando para iniciar sesión en PostgreSQL con privilegio raíz.

$ sudo -u postgres psql

C. Puede crear una base de datos llamada "testdb " ejecutando la siguiente instrucción SQL.

# Crear base de datos TestDB;

Si quieres crear una tabla en el testdb base de datos, entonces tienes que escribir "\C" Para cambiar la base de datos. Pero en este tutorial, no cambié la base de datos, y la tabla y todas las funciones se crearon en la base de datos predeterminada nombrada post -put.

Crea una tabla llamada maestros y cursos con algunos registros para probar el uso de desencadenantes que se crearán más adelante en este tutorial.

Crear maestros de mesa (
ID Clave primaria en serie,
Nombre Varchar (30),
Dirección Varchar (100),
Contact_no Varchar (20),
Disponible Bool predeterminado verdadero);
Crear cursos de mesa (
CURSO_ID CLAVE PRIMARIA DE SERIE,
Nombre Varchar (30),
Credit_Hour flotante,
maestro_id int predeterminado 0);
Insertar en maestros (nombre, dirección, contact_no, disponible)
valores
('Nasir Uddin', 'Dhanmondi 15, Dhaka', '+8801947854523', falso),
('Farzana Mahmud', '39/1, jigatola, dhaka ',' +88018553426754 ', falso);
Insertar en los cursos (Nombre, Credit_Hour, Maestro_id)
valores
('Física', 2.0, 1),
('Química', 2.0, 2),
('Matemáticas', 3.0, 1);

Ejemplos de activación

Cada disparador está asociado con una función PostgreSQL. Entonces, debe crear la función antes de crear el disparador. La forma de crear diferentes tipos de desencadenantes se ha mostrado en esta parte del tutorial.

Ejemplo-1: Crear antes de insertar disparador

Los disparos antes de insertar los disparos antes de realizar cualquier operación de inserción. Ejecute la siguiente instrucción SQL para crear una función nombrada antes_insert () que se utilizará en un Antes de insertar desencadenar. Uno de los principales propósitos de usar un desencadenante es la validación de datos. La siguiente función verificará si los campos particulares están vacíos o no. Si alguno de los valores de campo permanece vacío, se generará un mensaje de error particular. Se verificará otra validación para el nombre campo, y se generará un mensaje de error si la longitud de este campo es inferior a 5. La siguiente declaración condicional se utiliza para concatenar el valor de la cadena "+88" con el Contact_no Si la longitud del Contact_no el campo es 11.

Crear o reemplazar la función antes_insert ()
Devuelve disparador como
$$
COMENZAR
Si es nuevo.nombre = "o nuevo.dirección = "o nuevo.contact_no = "entonces
elevar el nombre o la dirección o el campo de contacto_no está vacío.';
TERMINARA SI;
Si longitud (nuevo.nombre) < 5 THEN
El campo de nombre de elevar debe contener más de 5 caracteres.';
TERMINARA SI;
Si longitud (nuevo.contact_no) = 11 entonces
NUEVO.contact_no = '+88' || NUEVO.contact_no;
TERMINARA SI;
Regresar nuevo;
FIN;
$$
Lenguaje 'PLPGSQL';

La siguiente salida aparecerá si la función se crea correctamente en el post -put base de datos.

Ejecute la siguiente instrucción SQL para crear un disparador con nombre check_before_insert que ejecutará el antes_insert () función antes de insertar el nuevo registro en el maestros mesa.

Crear chateo check_before_insert
Antes de insertar
En maestros
POR CADA FILA
Ejecutar la función antes_insert ();

La siguiente salida aparecerá si el disparador se crea correctamente.

Ejecute la siguiente declaración de inserción que contiene todos los datos válidos.

Insertar en maestros (nombre, dirección, contact_no)
Valores ('Zafar Iqbal', 'Mirpur, Dhaka', '01738975634');

La siguiente salida aparecerá si el nuevo registro se inserta correctamente.

Ejecute la siguiente declaración de inserción que contiene los datos no válidos para el campo Nombre.

Insertar en maestros (nombre, dirección, contact_no)
Valores ('lina', 'Malibag, dhaka', '01790975630');

El siguiente mensaje de error aparecerá para el valor de nombre no válido.

Ejecute la siguiente instrucción de inserción que contiene el valor vacío para el DIRECCIÓN y Contact_no campos, y el valor vacío para estos campos no es válido.

Insertar en maestros (nombre, dirección, contact_no)
Valores ('nilufar rahman', ",");

El siguiente mensaje de error aparecerá para los valores vacíos.

Ejecute la siguiente instrucción Seleccionar para verificar qué registros se insertan después de usar el activador antes de insertar.

Seleccionar * de los maestros;

La siguiente salida muestra que solo se inserta un registro después de usar el disparador.

Ejemplo-2: Crear después del disparador de eliminación

El disparador de eliminación de eliminación posterior se dispara después de eliminar cualquier registro de la tabla en particular. Ejecute la siguiente instrucción SQL para crear una función nombrada After_delete () que se utilizará en un Después de eliminar activar para eliminar las filas relacionadas del cursos tabla cuando se elimina un registro del maestros mesa. Aquí, un viejo.identificación se ha utilizado para rastrear el eliminado identificación desde el maestros mesa.

Crear función después_delete ()
Devuelve disparador como
$$
COMENZAR
Eliminar de los cursos donde maestro_id = viejo.identificación;
Regresar viejo;
FIN;
$$
Lenguaje PLPGSQL;

La siguiente salida aparecerá si la función se crea correctamente en el post -put base de datos.

Ejecute la siguiente instrucción SQL para crear un disparador con nombre delete_teacher que ejecutará el After_delete () función después de eliminar un registro del maestros tabla que eliminará los registros del cursos mesa donde el profesor_id Valor coincide con el eliminado identificación valor de la maestros mesa.

Crear gatillo delete_teacher
Después de eliminar
En maestros
POR CADA FILA
Ejecutar la función after_delete ();

La siguiente salida aparecerá si el disparador se crea correctamente.

Ejecute la siguiente declaración de eliminación que eliminará el registro de la tabla de los maestros donde el identificación el valor es 1. El delete_teacher El gatillo se disparará si se elimina algún registro del maestros mesa.

Eliminar de los maestros donde id = 1;

La siguiente salida muestra que un registro se ha eliminado de la tabla de los maestros. Entonces el delete_teacher El gatillo será despedido y eliminará todos los registros de la tabla de cursos que contiene 1 en el profesor_id campo.

Ahora, ejecute los siguientes comandos de selección para verificar qué registros se eliminan de la maestros y cursos mesas.

Seleccionar * de los maestros;
Seleccionar * de los cursos;

La salida muestra que un registro se ha eliminado de la tabla de los maestros, y se han eliminado dos registros de la tabla de cursos utilizando el disparador.

Ejemplo-3: Crear en lugar de activación de activación

El desencadenante en lugar de la actualización se puede aplicar solo en las vistas de la tabla. Por lo tanto, debe crear una vista de la tabla y una función para probar el uso de este tipo de disparador. Ejecute la siguiente instrucción SQL para crear una función nombrada insert_course () que actualizarán los valores del maestros y el cursos tabla después de insertar un nuevo registro para el cursos mesa. El propósito de esta función es asignar un maestro para el nuevo curso si el maestro está disponible.

Crear o reemplazar la función insert_course ()
Devuelve disparador como
$$
DECLARAR
tec_id int;
COMENZAR
Insertar en los cursos (Nombre, Credit_Hour)
Valores (nuevos.Nombre, nuevo.hora de crédito);
Seleccione ID en TEC_ID de los maestros donde estén disponibles = Límite verdadero 1;
Actualizar el conjunto de maestros disponibles = falso donde id = TEC_ID;
Actualizar cursos set maestro_id = tec_id donde maestro_id = 0;
Regresar nuevo;
FIN
$$
Lenguaje PLPGSQL;

La siguiente salida aparecerá si la función se crea correctamente en el post -put base de datos.

Ejecute el siguiente comando SQL para crear una vista de la tabla de cursos.

Crear ver cursos_view como
Seleccionar * de los cursos;

La siguiente salida aparecerá si la vista se crea con éxito.

Ahora, ejecute la siguiente instrucción SQL para crear el disparador Instance de Insertar con nombre actualizar datos que se disparará cuando se inserta un nuevo registro utilizando el create_view vista.

Crear gatillo update_data
En lugar de insertar en los cursos_view
POR CADA FILA
Ejecutar función insert_course ();

La siguiente salida aparecerá si el disparador se crea correctamente.

Ejecute la siguiente declaración de inserción para insertar un nuevo registro en la tabla de cursos utilizando cursos_view vista.

Insertar en Courses_View (Nombre, Credit_Hour)
valores ('matemáticas más altas', 3.0);

La siguiente salida aparecerá si los datos se insertan correctamente utilizando la vista.

Ahora, ejecute las siguientes declaraciones de selección para verificar cómo se han modificado los cursos y las tablas de maestros después de insertar un nuevo registro en la tabla de cursos utilizando la vista.

Seleccionar * de los maestros;
Seleccionar * de Courses_View;

La siguiente salida muestra que se ha insertado un nuevo registro en la tabla de cursos y el campo disponible del maestros La tabla se ha actualizado de "T" a "F", donde el valor de ID es 3, y este valor de ID se ha actualizado en el cursos tabla para asignar a este maestro para el curso recién insertado.

Conclusión

Muchas tareas de la base de datos se pueden realizar automáticamente utilizando un disparador en la base de datos PostgreSQL. Cada disparador se ejecuta utilizando una función particular. Muchos propósitos del uso de desencadenantes se han explicado en este tutorial creando múltiples desencadenantes con la función. Aquí se han creado tres tipos diferentes de desencadenantes que ayudarán a los nuevos usuarios de PostgreSQL a conocer la forma de crear y usar desencadenantes en la base de datos PostgreSQL.