Re: pequeña ayuda con triggers y functions

From: Diego Gil <listas(at)adminsa(dot)com>
To: Aldo Quezada <huincha(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: pequeña ayuda con triggers y functions
Date: 2008-05-20 01:50:19
Message-ID: 1211248219.3391.5.camel@roadwarrior.maipucinos.com.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El lun, 19-05-2008 a las 20:56 -0400, Aldo Quezada escribió:
> OK
>
> a ver..
>
> tengo una tabla a la cual se le hacen actualizaciones por php.. el
> codigo del php es un asco por desorden del codigo.
> por lo cual preferi buscar una solucion por haciendo un trigger y una
> funcion, que cada vez que se actualizara esta tabla, lanzara el
> trigger para actualizar un campo de esta misma tabla, pero caigo en la
> redundancia ciclica.

No, hasta donde yo entiendo. Proba el siguiente ejemplo. Crea nuevos
registros asignando valores integer al campo atributo1. Luego modifica
esos valores y fijate como queda el campo atributo2 despues de cada
modificación.

Saludos,
Diego.

--
-- PostgreSQL database dump
--

-- Started on 2008-05-19 22:44:20 ART

SET client_encoding = 'UTF8';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;

--
-- TOC entry 1609 (class 1262 OID 91132)
-- Name: test; Type: DATABASE; Schema: -; Owner: -
--

CREATE DATABASE test WITH TEMPLATE = template0 ENCODING = 'UTF8';

\connect test

SET client_encoding = 'UTF8';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;

--
-- TOC entry 1610 (class 0 OID 0)
-- Dependencies: 4
-- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: -
--

COMMENT ON SCHEMA public IS 'Standard public schema';

--
-- TOC entry 265 (class 2612 OID 137345)
-- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -
--

CREATE PROCEDURAL LANGUAGE plpgsql;

SET search_path = public, pg_catalog;

--
-- TOC entry 19 (class 1255 OID 137346)
-- Dependencies: 265 4
-- Name: antes_de_update(); Type: FUNCTION; Schema: public; Owner: -
--

CREATE FUNCTION antes_de_update() RETURNS "trigger"
AS $$DECLARE

BEGIN

NEW.atributo2 = COALESCE(OLD.atributo2 || ' otra vez ... ', 'primera
vez ... ');

RETURN NEW;
END

$$
LANGUAGE plpgsql;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- TOC entry 1271 (class 1259 OID 137335)
-- Dependencies: 4
-- Name: tabla_ejemplo; Type: TABLE; Schema: public; Owner: -;
Tablespace:
--

CREATE TABLE tabla_ejemplo (
clave integer NOT NULL,
atributo1 integer,
atributo2 text
);

--
-- TOC entry 1270 (class 1259 OID 137333)
-- Dependencies: 1271 4
-- Name: tabla_ejemplo_clave_seq; Type: SEQUENCE; Schema: public; Owner:
-
--

CREATE SEQUENCE tabla_ejemplo_clave_seq
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;

--
-- TOC entry 1612 (class 0 OID 0)
-- Dependencies: 1270
-- Name: tabla_ejemplo_clave_seq; Type: SEQUENCE OWNED BY; Schema:
public; Owner: -
--

ALTER SEQUENCE tabla_ejemplo_clave_seq OWNED BY tabla_ejemplo.clave;

--
-- TOC entry 1613 (class 0 OID 0)
-- Dependencies: 1270
-- Name: tabla_ejemplo_clave_seq; Type: SEQUENCE SET; Schema: public;
Owner: -
--

SELECT pg_catalog.setval('tabla_ejemplo_clave_seq', 2, true);

--
-- TOC entry 1602 (class 2604 OID 137337)
-- Dependencies: 1271 1270 1271
-- Name: clave; Type: DEFAULT; Schema: public; Owner: -
--

ALTER TABLE tabla_ejemplo ALTER COLUMN clave SET DEFAULT
nextval('tabla_ejemplo_clave_seq'::regclass);

--
-- TOC entry 1604 (class 2606 OID 137342)
-- Dependencies: 1271 1271
-- Name: tabla_ejemplo_pkey; Type: CONSTRAINT; Schema: public; Owner: -;
Tablespace:
--

ALTER TABLE ONLY tabla_ejemplo
ADD CONSTRAINT tabla_ejemplo_pkey PRIMARY KEY (clave);

--
-- TOC entry 1605 (class 2620 OID 137347)
-- Dependencies: 19 1271
-- Name: disparador_antes_de_update; Type: TRIGGER; Schema: public;
Owner: -
--

CREATE TRIGGER disparador_antes_de_update
BEFORE UPDATE ON tabla_ejemplo
FOR EACH ROW
EXECUTE PROCEDURE antes_de_update();

--
-- TOC entry 1611 (class 0 OID 0)
-- Dependencies: 4
-- Name: public; Type: ACL; Schema: -; Owner: -
--

REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM postgres;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO PUBLIC;

-- Completed on 2008-05-19 22:44:20 ART

--
-- PostgreSQL database dump complete
--

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Ernesto Lozano 2008-05-20 01:50:32 Re: Cursos?! Mejor charlas y eventos :)
Previous Message Mario Cassanelli 2008-05-20 01:49:37 Re: Cursos?! Mejor charlas y eventos :)