Re: Rechazar record en insercion masiva

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

In response to

Responses

Browse pgsql-es-ayuda by date

  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