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
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 |