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
--
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 :) |