Disparadores (triggers) en PostgreSQL

Documentos relacionados
SUBPROGRAMAS PL/SQL César Martínez C. Profesor Instructor de Base de Datos Sede Puente Alto DUOC

Pre-Taller Gestión de Privilegios de Usuarios 2. Manipulación de Vistas 3. Creación y manipulación de Triggers (Introducción al uso de PL/pgsql)

Uso de Disparadores. Miguel Angel Garduño Cordova Isaac Méndez Hernández

PG/PLSQL. Miguel Ángel Manso ETSI en Topografía, Geodesia y Cartografía - UPM

DISPARADORES EN SQL DISPARADORES EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999

Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers

Triggers 27/11/2014. Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers en Oracle

FUNCIONES PHP: DECLARACIÓN Y LLAMADAS. PARÁMETROS, RETURN. EJERCICIOS EJEMPLOS RESUELTOS. (CU00827B)

GUÍA DE TRABAJO GRADO 11. Media Fortalecida - SENA Programación de Software Ing. Néstor Raúl Suarez Perpiñan Página 1 de 6

Concepto de vista. (con ciertas limitaciones). nivel físico) Una vista es una tabla virtual (no tiene una correspondencia a

Lenguaje SQL (2ª Parte) Definición de datos

Triggers en PL/SQL. Jonathan Medina Gómez Facultad de Ingeniería Universidad de Antioquia

Oracle PL/SQL. Programa de Estudio.

ESCUELA DE INFORMÁTICA

PROCEDIMIENTOS ALMACENADOS

TRIGGER LEONEL CADOSO ROMERO 1

Introducción al SQL de InterBase: DDL y DML

Modelo de base de datos única con múltiples geobases de datos. Modelo de múltiples bases de datos espaciales

Introducción a PostgreSQL. Facultad de Ingeniería Enrique Felipe Anastacio Base de Datos

Manejo de Bases de Datos Mysql en Lenguaje C

Oracle Database: Programación con PL/SQL

Integridad Referencial. Restricciones (constraints)

Data Bases 2. La sintaxis precisa de esta función es: mysql_pconnect (nombre del servidor, el usuario de la base de datos, password ) ;

PL/PGSQL. Extensión "procedural" de SQL

Macros y Visual Basic para Aplicaciones en Excel

TUTORIAL PSEINT. Ing. Ronald Rentería Ayquipa. Fundamentos de Programación

Tipos de datos estructurados

Haga clic para PostgreS cambiar el estilo

2.2 Nombres, Ligado y Ámbito

Manual de turbo pascal

Conversión entre Tipos

SQL. (...la guía básica de supervivencia de dmi) Universidad de los Andes Demián Gutierrez Enero

Conceptos de Bases de Datos Relacionales Triggers

Sesión No. 10. Contextualización INFORMÁTICA 1. Nombre: Gestor de Base de Datos (Access)

Un ejemplo teórico de trigger podría ser éste:

DISPARADORES EN SQL SINTAXIS GENERAL DE UN DISPARADOR EN SQL:2003

InterBase / Firebird: el uso de eventos

Arrays unidimensionales. Dim.Option Base. Erase. Ejemplos en Visual Basic (CU00311A)

MANUAL DE PROGRAMACIÓN PARA BASES DE DATOS 1.0 MySQL

1. Lenguaje de Definición de Datos. 2. Lenguaje de Manipulación de. Datos. M. C. Gustavo Alfonso Gutiérrez Carreón

RESTRICCIONES DE DOMINIOS

FUNDAMENTOS DE INFORMÁTICA

Configuración de Procedimientos en SQL. Introducción

Otros objetos de Base de Datos

GUIA DE PROCEDIMIENTOS Y FUNCIONES ALMACENADOS EN MYSQL

Selección de registros de una base de datos

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

Arreglos. Otra definición seria;

Guia del Programador de PostgreSQL

Procesos e Hilos en C

Checks, Triggers y Excepciones en InterBase: validando desde la base de datos

Estructuras en LabVIEW.

Guía práctica de estudio 05: Diagramas de flujo

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison

La última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual.

- Bases de Datos - - Diseño Físico - Luis D. García

Tema 1. Bases de datos activas

Aplicaciones de las vistas Concepto de vista Vistas en SQL Vistas en SQL.

Procedimientos, Funciones, Trigger y Cursores en ORACLE

Modulo I: Introducción Gestores de Bases De Datos

Creando una capa de abstracción con PHP y mysqli

Desarrollo de aplicaciones de acceso a base de datos con JBuilder 7

EJERCICIO 26 DE EXCEL

Repaso. Laboratorio Informix. Stored Procedures. Ejemplo. Creación de stored procedures. Sql en un Procedimiento

ACCEDER A BITÁCORA DE TRABAJO SQL SERVER

Laboratorio Informix. Stored Procedures Triggers

Fundamentos de Oracle

//Sección de manejo de excepciones. Las rutinas de manejo de errores //aparecen aqui

Tutor de ventas de Amazon. Crear catálogo con ficheros de inventario

PRÁCTICA III. DISPARADORES EN SQL (II)

Oracle Database 11g: Programación con PL/SQL Nuevo

QUÉ ES UNA CLASE JAVA? ATRIBUTOS (PROPIEDADES O CAMPOS), CONSTRUCTOR Y MÉTODOS. (CU00623B)

Maestría en Bioinformática. Bases de Datos y Sistemas de Información SQL: DML. Ing. Alfonso Vicente, PMP

En este artículo vamos a conocer los tipos de datos que podemos manejar programando en C.

Herramientas computacionales para la matemática MATLAB: Funciones definidas por el usuario (parte I)

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Oracle 12c DISEÑO Y PROGRAMACIÓN

Ejercicios ejemplo: verificación de algoritmos del valor suma de una sucesión matemática. (CU00238A)

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

SERVICIO NACIONAL DE APRENDIZAJE SENA SISTEMA INTEGRADO DE GESTIÓN Procedimiento Ejecución de la Formación Profesional Integral GUÍA DE APRENDIZAJE

Diseño de bases de datos

Oracle Database: Introducción a SQL

Tutorial Oracle SQL Developer 1.2.1

Anexo. Control de errores

Tema IV El lenguaje de programación PHP Tipos de Datos

Tema 3.- Predicados y sentencias condicionales

Dos formas de devolver una colección con un Data Provider

PRÁCTICA DE LABORATORIO 4 Programación Orientada a Objetos

EDUComputacion. Te ofrece el curso de:

Macros y Visual Basic para Aplicaciones en Excel

Notas técnicas de AS/400 - iseries- System i- Tip Nro. 45

Tema: Clases y Objetos en C#. Parte II.

Tema 3. Aplicaciones de Tipo Consola

Grandes volúmenes de datos Particionamiento. bases de datos

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006

Transcripción:

Disparadores (triggers) en PostgreSQL Una de las funcionalidades disponibles en PostgreSQL son los denominados disparadores (triggers). En este artículo vamos a introducirnos en el mundo de los disparadores, como funcionan y como podemos empezar a utilizarlos. Un disparador no es otra cosa que una acción definida en una tabla de nuestra base de datos y ejecutada automáticamente por una función programada por nosotros. Esta acción se activará, segun la definamos, cuando realicemos un INSERT, un UPDATE ó un DELETE en la susodicha tabla. Un disparador se puede definir de las siguientes maneras: Para que ocurra ANTES de cualquier INSERT,UPDATE ó DELETE Para que ocurra DESPUES de cualquier INSERT,UPDATE ó DELETE Para que se ejecute una sola vez por comando SQL (statement-level trigger) Para que se ejecute por cada linea afectada por un comando SQL (row-level trigger) Esta es la definición del comando SQL que se puede utilizar para definir un disparador en una tabla. Antes de definir el disparador tendremos que definir el procedimiento almacenado que se ejecutará cuando nuestro disparador se active. 1 de 6

El procedimiento almacenado usado por nuestro disparador se puede programar en cualquiera de los lenguajes de procedimientos disponibles, entre ellos, el proporcionado por defecto cuando se instala PostgreSQL, PL/pgSQL. Este lenguaje es el que utilizaremos en todos los ejemplos de este árticulo. Podeis encontrar mas información sobre procedimientos almacenados en el artículo "Procedimientos almacenados y PL/pgSQL" Características y reglas a seguir A continuación teneis algunas de las características y reglas más importantes a tener en cuenta, cuando definamos un disparador y/ó programemos un procedimiento almacenado que se vaya a utilizar por un disparador: 1. El procedimiento almacenado que se vaya a utilizar por el disparador debe de definirse e instalarse antes de definir el propio disparador. 2. Un procedimiento que se vaya a utilizar por un disparador no puede tener argumentos y tiene que devolver el tipo "trigger". 3. Un mismo procedimiento almacenado se puede utilizar por múltiples disparadores en diferentes tablas. 4. Procedimientos almacenados utilizados por disparadores que se ejecutan una sola vez per comando SQL (statement-level) tienen que devolver siempre NULL. 5. Procedimientos almacenados utilizados por disparadores que se ejecutan una vez per linea afectada por el comando SQL (row-level) pueden devolver una fila de tabla. 2 de 6

6. Procedimientos almacenados utilizados por disparadores que se ejecutan una vez per fila afectada por el comando SQL (row-level) y ANTES de ejecutar el comando SQL que lo lanzó, pueden: Retornar NULL para saltarse la operación en la fila afectada. Ó devolver una fila de tabla (RECORD) 7. Procedimientos almacenados utilizados por disparadores que se ejecutan DESPUES de ejecutar el comando SQL que lo lanzó, ignoran el valor de retorno, asi que pueden retornar NULL sin problemas. 8. En resumen, independendientemente de como se defina un disparador, el procedimiento almacenado utilizado por dicho disparador tiene que devolver ó bien NULL, ó bien un valor RECORD con la misma estructura que la tabla que lanzó dicho disparador. 9. Si una tabla tiene más de un disparador definido para un mismo evento (INSERT,UPDATE,DELETE), estos se ejecutarán en orden alfabético por el nombre del disparador. En el caso de disparadores del tipo ANTES / rowlevel, la file retornada por cada disparador, se convierte en la entrada del siguiente. Si alguno de ellos retorna NULL, la operación será anulada para la fila afectada. 10. Procedimientos almacenados utilizados por disparadores pueden ejecutar sentencias SQL que a su vez pueden activar otros disparadores. Esto se conoce como disparadores en cascada. No existe límite para el número de disparadores que se pueden llamar pero es responsabilidad del programador el evitar una recursión infinita de llamadas en la que un disparador se llame asi mismo de manera recursiva. 3 de 6

Otra cosa que tenemos que tener en cuenta es que, por cada disparador que definamos en una tabla, nuestra base de datos tendrá que ejecutar la función asociada a dicho disparador. El uso de disparadores de manera incorrecta ó inefectiva puede afectar significativamente al rendimiento de nuestra base de datos. Los principiantes deberian de usar un tiempo para entender como funcionan y asi poder hacer un uso correcto de los mismos antes de usarlos en sistemas en producción. Variables especiales en PL/pgSQL Cuando una función escrita en PL/pgSQL es llamada por un disparador tenemos ciertas variable especiales disponibles en dicha función. Estas variables son las siguientes: NEW Tipo de dato RECORD; Variable que contiene la nueva fila de la tabla para las operaciones INSERT/UPDATE en disparadores del tipo row-level. Esta variable es NULL en disparadores del tipo statement-level. OLD Tipo de dato RECORD; Variable que contiene la antigua fila de la tabla para las operaciones UPDATE/DELETE en disparadores del tipo row-level. Esta variable es NULL en disparadores del tipo statement-level. TG_NAME Tipo de dato name; variable que contiene el nombre del disparador que está usando la función actualmente. 4 de 6

TG_WHEN Tipo de dato text; una cadena de texto con el valor BEFORE o AFTER dependiendo de como el disparador que está usando la función actualmente ha sido definido TG_LEVEL Tipo de dato text; una cadena de texto con el valor ROW o STATEMENT dependiendo de como el disparador que está usando la función actualmente ha sido definido TG_OP Tipo de dato text; una cadena de texto con el valor INSERT, UPDATE o DELETE dependiendo de la operación que ha activado el disparador que está usando la función actualmente. TG_RELID Tipo de dato oid; el identificador de objeto de la tabla que ha activado el disparador que está usando la función actualmente. TG_RELNAME Tipo de dato name; el nombre de la tabla que ha activado el disparador que está usando la función actualmente. Esta variable es obsoleta y puede desaparacer en el futuro. Usar TG_TABLE_NAME. TG_TABLE_NAME Tipo de dato name; el nombre de la tabla que ha activado el disparador que está usando la función actualmente. 5 de 6

TG_TABLE_SCHEMA Tipo de dato name; el nombre de la schema de la tabla que ha activado el disparador que está usando la función actualmente. TG_NARGS Tipo de dato integer; el número de argumentos dados al procedimiento en la sentencia CREATE TRIGGER. TG_ARGV[] Tipo de dato text array; los argumentos de la sentencia CREATE TRIGGER. El índice empieza a contar desde 0. Indices inválidos (menores que 0 ó mayores/iguales que tg_nargs) resultan en valores nulos. Obtenido de: http://www.postgresql.org.es/node/301 Consultado: 27 de enero de 2017 6 de 6