From: | Miguel Rodríguez Penabad <penabad(at)gmail(dot)com> |
---|---|
To: | "Edwin Quijada" <listas_quijada(at)hotmail(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Rechazar record en insercion masiva |
Date: | 2008-05-07 16:27:35 |
Message-ID: | 95335e4e0805070927x62397127k33887a1d61ba2167@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
2008/5/7 Edwin Quijada <listas_quijada(at)hotmail(dot)com>:
>
> Estoy usando COPY para insertar datos a una tabla pero hay registros de los que estoy insertando que deberian ser eliminados. Puedo crear un trigger en el cual si detecto que ese record no es valido, digamos un campo trae un valor que identifica que no es valido, evitar q sea insertado o q sea borrado.
> Pense en un trigger en AFTER y si el campo es TRU hacer un DELETE pero no se si habra otra mejor manera
Mejor hazlo before, y en la función que devuelve trigger, si la
concidicón se cumple devuelve NULL
Ejemplillo:
create table prueba(campo int);
-- Vamos a evitar que se inserten números pares
create function no_inserta_pares()
returns trigger
language plpgsql
as $$
BEGIN
IF NEW.campo % 2 = 0 THEN
RETURN NULL;
END IF;
RETURN NEW;
END
$$;
create trigger t_no_inserta_pares
before insert on prueba for each row
execute procedure no_inserta_pares();
Probándolo:
postgres=# insert into prueba select i from generate_series(1,11) i;
INSERT 0 6
postgres=# select * from prueba;
campo
-------
1
3
5
7
9
11
(6 filas)
--
Miguel Rodríguez Penabad
From | Date | Subject | |
---|---|---|---|
Next Message | Edwin Quijada | 2008-05-07 16:37:15 | RE: Migrar SQL Server 2005 a PostgreSQL |
Previous Message | Edwin Quijada | 2008-05-07 16:16:35 | Rechazar record en insercion masiva |