RE: Rechazar record en insercion masiva

From: Edwin Quijada <listas_quijada(at)hotmail(dot)com>
To: Miguel Rodríguez Penabad <penabad(at)gmail(dot)com>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Rechazar record en insercion masiva
Date: 2008-05-07 16:39:00
Message-ID: BLU137-W49F5493A9F75B76EC3F957E3D10@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


Gracias, esta perfecto de esa forma. Eso lo que buscaba una forma de no tener que hacer el delete a la fuerza. Pero con el NULL se resuelve mi problema.

*-------------------------------------------------------*
*-Edwin Quijada
*-Developer DataBase
*-JQ Microsistemas
*-809-849-8087

* " Si deseas lograr cosas excepcionales debes de hacer cosas fuera de lo comun"
*-------------------------------------------------------*

> Date: Wed, 7 May 2008 18:27:35 +0200
> From: penabad(at)gmail(dot)com
> To: listas_quijada(at)hotmail(dot)com
> Subject: Re: [pgsql-es-ayuda] Rechazar record en insercion masiva
> CC: pgsql-es-ayuda(at)postgresql(dot)org
>
> 2008/5/7 Edwin Quijada :
>>
>> 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

_________________________________________________________________
Do more with your photos with Windows Live Photo Gallery.
http://www.windowslive.com/share.html?ocid=TXT_TAGLM_Wave2_photos_022008

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Edwin Quijada 2008-05-07 16:43:27 RE: Bases de Datos UTF-8 y LATIN1 en un mismo server (PostgreSQL 8.3.1)
Previous Message Edwin Quijada 2008-05-07 16:37:15 RE: Migrar SQL Server 2005 a PostgreSQL