Re: Triggers desde pgAdmin

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

In response to

Browse pgsql-es-ayuda by date

  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