From: | Miguel Rodríguez Penabad <penabad(at)gmail(dot)com> |
---|---|
To: | el-PRiNCiPiTo <el-PRiNCiPiTo(at)terra(dot)es> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Triggers desde pgAdmin |
Date: | 2008-04-15 13:53:13 |
Message-ID: | 95335e4e0804150653q2ea160e9yd512758075118eab@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
El 15/04/08, el-PRiNCiPiTo <el-PRiNCiPiTo(at)terra(dot)es> escribió:
> Hola a todos,
> el otro día leí unos post sobre los triggers y he estado buscando
> información pero no me aclaro mucho.
¿Has mirado esto?
http://www.postgresql.org/docs/8.2/static/triggers.html
> Tengo una tabla con un campo serial y 5 campos mas que almacenan
> claves de otras tablas con las que están relacionadas. Lo que quiero hacer
> es que cada vez que se haga un insert en esa tabla me genere en otro campo
> un código de barras (el número con el que se generará mejor dicho) que
> podría ser los 5 campos concatenados y el serial al final.
> Me gustaría crear el trigger desde el pdadmin porque con la
> información que he encontrado para hacerlo desde la consola no me entero
> mucho y puesto que la base de datos ya está funcionando no querría hacer
> nada que la haga funcionar mal.
No sé qué te aporta el pgadmin para crear los triggers, ya que la
función la tienes que crear manualmente... de hecho, en mi instalación
(versión 8.3.1, pgAdmin III v.1.8.2.) he encontrado alguna limitación,
como no poder indicar que un trigger es a nivel de sentencia (no "for
each row").
De todas formas te mando un pequeño ejemplo que pienso que hace lo que
tú deseas. Espero que te sirva de algo.
--
create table prueba(
id serial primary key,
untexto text,
otrotexto text,
elcampocalculado text
);
-- create language plpgsql; /*Si no está creado ya*/
create or replace function calcula_campo()
returns trigger
language plpgsql
as
$$
BEGIN
new.elcampocalculado := new.untexto || new.otrotexto || new.id::text;
return new;
END
$$;
create trigger t_calcula_campo
before insert on prueba
for each row
execute procedure calcula_campo();
insert into prueba(untexto,otrotexto)
values('uno', 'dos');
postgres=# insert into prueba(untexto,otrotexto)
postgres-# values('uno', 'dos');
INSERT 0 1
postgres=# select * from prueba;
id | untexto | otrotexto | elcampocalculado
----+---------+-----------+------------------
1 | uno | dos | unodos1
(1 fila)
--
Miguel Rodríguez Penabad
From | Date | Subject | |
---|---|---|---|
Next Message | Gabriel Hermes Colina Zambra | 2008-04-15 14:15:13 | RE: BackUp por codigo |
Previous Message | MIGUEL CANCHAS | 2008-04-15 13:50:29 | RE: BackUp por codigo |