Re: postgres y java

Lists: pgsql-es-ayuda
From: "Noe Sereno" <nsereno(at)oestesa(dot)com(dot)mx>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: postgres y java
Date: 2006-08-09 15:57:45
Message-ID: 20060809155743.HDBB9167.apk1fe15@Sistemas
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Primero que nada espero que se encuentren con salud y trabajando duro.

Voy a empezar a desarrollar una aplicación en java que se conecte a mi base
de datos en postgres, utilizo como sistema operativo Windows XP. Recuerdo
que hace algun tiempo en la universidad utilizaba progress y alli podia
hacer (me parece que con un trigger) que automáticamente se me generaran id
por ejemplo de usuarios cada vez que yo intentara crear alguno. Ademas de
que no tengo el codigo de este trigger, lo que no se, y por eso tengo la
duda es si esta generacion dinamica de id (ya sea para la tabla usuarios o
para cualquier tabla) la debo generar desde postgres y si es asi, como puedo
visualizarla cuando yo este creando mi usuario desde la aplicación en java.

Espero haya sido claro con respecto a mis pretensiones, sino fue asi, espero
respuesta para ampliar un poco mas mi objetivo y asi obtener su ayuda.

De antemano muchas gracias, y reciban un cordial saludo…


From: "Patricio Cifuentes Ithal" <pcifuentes(at)siigsa(dot)cl>
To: <nsereno(at)oestesa(dot)com(dot)mx>, <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: postgres y java
Date: 2006-08-09 16:46:10
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

select last_value from nombre_secuencia_seq

con este SQL puedes saber el ultimo valor ingresado en una secuencia luego d euna funcion disoparadora automatica del postgres, al haber ingresado un registro a una tabla.

--

Patricio Cifuentes Ithal
Ingeniero en Informática

Desarrollo Tecnológico
SIIGSA
(56-2) 204 60 22
----- Original Message -----
From: Noe Sereno
To: pgsql-es-ayuda(at)postgresql(dot)org
Sent: Wednesday, August 09, 2006 11:57 AM
Subject: [pgsql-es-ayuda] postgres y java

Primero que nada espero que se encuentren con salud y trabajando duro.

Voy a empezar a desarrollar una aplicación en java que se conecte a mi base de datos en postgres, utilizo como sistema operativo Windows XP. Recuerdo que hace algun tiempo en la universidad utilizaba progress y alli podia hacer (me parece que con un trigger) que automáticamente se me generaran id por ejemplo de usuarios cada vez que yo intentara crear alguno. Ademas de que no tengo el codigo de este trigger, lo que no se, y por eso tengo la duda es si esta generacion dinamica de id (ya sea para la tabla usuarios o para cualquier tabla) la debo generar desde postgres y si es asi, como puedo visualizarla cuando yo este creando mi usuario desde la aplicación en java.

Espero haya sido claro con respecto a mis pretensiones, sino fue asi, espero respuesta para ampliar un poco mas mi objetivo y asi obtener su ayuda.

De antemano muchas gracias, y reciban un cordial saludo.


From: "Mario Gonzalez" <gonzalemario(at)gmail(dot)com>
To: nsereno(at)oestesa(dot)com(dot)mx
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: postgres y java
Date: 2006-08-09 16:48:44
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

On 09/08/06, Noe Sereno <nsereno(at)oestesa(dot)com(dot)mx> wrote:
>
> hacer (me parece que con un trigger) que automáticamente se me generaran id
> por ejemplo de usuarios cada vez que yo intentara crear alguno.
>
Haber, tu necesitas poder generar un identificador para cada
registro al hacer una insercion?

Bueno si es eso lo que buscas, lo mas simple es que utilices el
tipo de dato SERIAL

create table test (id serial, num integer);
insert into test(num) values (4);
insert into test(num) values (2);

Como ves, se hace el insert solamente sobre los campos que
necesitas, y de esa forma el campo id que es de tipo serial, empezara
a incrementar de a uno.

En los archivos de la lista ciertamente encontraras mas ejemplos.

>

--
http://www.advogato.org/person/mgonzalez/


From: WILLIAM PARRA <wilparra(at)yahoo(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: postgres y java
Date: 2006-08-09 16:54:47
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hola:

Yo uso precisamente Triggers para generar Id de algunas de las tablas en los sistemas que he desarrollado en Java precisamente. Pero la unica manera de verlas (las llaves) es después de que se ingrese el registro a la Base de datos. NO antes... Como usted sabe, esta llave se genera justo antes de la insercion... LO otro es que en lugar de trigger uses una secuencia o una funcion, en este caso sÍ es posible que veas el codigo que genera el Sistema.

CREATE FUNCTION SEC_TIPOPARTIDA() RETURNS trigger AS
'
DECLARE NRO_SEC NUMERIC(15);
BEGIN
SELECT MAX(NRO_TIPOPARTIDA) INTO NRO_SEC FROM TIPOPARTIDA;
IF NRO_SEC ISNULL THEN
NEW.NRO_TIPOPARTIDA = 1;
ELSE
NEW.NRO_TIPOPARTIDA = NRO_SEC+1;
END IF;
RETURN NEW;
END;
' LANGUAGE 'plpgsql'
CREATE TRIGGER INSERTA_TIPOPARTIDA
BEFORE INSERT ON TIPOPARTIDA FOR EACH ROW
EXECUTE PROCEDURE SEC_TIPOPARTIDA()

Este es el Trigger que uso para la generación del Id. No usi secuencias, porque cuando libero las tablas, la secuencia sigue con valores altos....

Espero te sirva de algo.....

Noe Sereno <nsereno(at)oestesa(dot)com(dot)mx> escribió:
Primero que nada espero que se encuentren con salud y trabajando duro.

Voy a empezar a desarrollar una aplicación en java que se conecte a mi base de datos en postgres, utilizo como sistema operativo Windows XP. Recuerdo que hace algun tiempo en la universidad utilizaba progress y alli podia hacer (me parece que con un trigger) que automáticamente se me generaran id por ejemplo de usuarios cada vez que yo intentara crear alguno. Ademas de que no tengo el codigo de este trigger, lo que no se, y por eso tengo la duda es si esta generacion dinamica de id (ya sea para la tabla usuarios o para cualquier tabla) la debo generar desde postgres y si es asi, como puedo visualizarla cuando yo este creando mi usuario desde la aplicación en java.

Espero haya sido claro con respecto a mis pretensiones, sino fue asi, espero respuesta para ampliar un poco mas mi objetivo y asi obtener su ayuda.

De antemano muchas gracias, y reciban un cordial saludo…

__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
Regístrate ya - http://correo.espanol.yahoo.com/


From: Iván - EcRed <jvasr(at)ec-red(dot)com>
To: <nsereno(at)oestesa(dot)com(dot)mx>, <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: postgres y java
Date: 2006-08-09 17:15:01
Message-ID: 001501c6bbd7$5becdbd0$0328a8c0@server
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hola:

Tienes que hacer una function o procedure en postgres que te devuelva el item de la fila creada, esto lo capturas desde java y ya tienes el código para mostrarlo en tu aplicación.

Atte.-

Iván
----- Original Message -----
From: Noe Sereno
To: pgsql-es-ayuda(at)postgresql(dot)org
Sent: Wednesday, August 09, 2006 10:57 AM
Subject: [pgsql-es-ayuda] postgres y java

Primero que nada espero que se encuentren con salud y trabajando duro.

Voy a empezar a desarrollar una aplicación en java que se conecte a mi base de datos en postgres, utilizo como sistema operativo Windows XP. Recuerdo que hace algun tiempo en la universidad utilizaba progress y alli podia hacer (me parece que con un trigger) que automáticamente se me generaran id por ejemplo de usuarios cada vez que yo intentara crear alguno. Ademas de que no tengo el codigo de este trigger, lo que no se, y por eso tengo la duda es si esta generacion dinamica de id (ya sea para la tabla usuarios o para cualquier tabla) la debo generar desde postgres y si es asi, como puedo visualizarla cuando yo este creando mi usuario desde la aplicación en java.

Espero haya sido claro con respecto a mis pretensiones, sino fue asi, espero respuesta para ampliar un poco mas mi objetivo y asi obtener su ayuda.

De antemano muchas gracias, y reciban un cordial saludo.


From: "Linder Poclaba" <linder(dot)poclaba(at)gmail(dot)com>
To: nsereno(at)oestesa(dot)com(dot)mx
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: postgres y java
Date: 2006-08-09 20:21:54
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

El día 9/08/06, Noe Sereno <nsereno(at)oestesa(dot)com(dot)mx> escribió:
>
> Primero que nada espero que se encuentren con salud y trabajando duro.
>
>
>
> Voy a empezar a desarrollar una aplicación en java que se conecte a mi
> base de datos en postgres, utilizo como sistema operativo Windows XP.
> Recuerdo que hace algun tiempo en la universidad utilizaba progress y alli
> podia hacer (me parece que con un trigger) que automáticamente se me
> generaran id por ejemplo de usuarios cada vez que yo intentara crear alguno.
> Ademas de que no tengo el codigo de este trigger
>

Si quieres generar ids para tablas, de forma automatica olvidate de generar
con triggers.

, lo que no se, y por eso tengo la duda es si esta generacion dinamica de id
> (ya sea para la tabla usuarios o para cualquier tabla) la debo generar desde
> postgres y si es asi, como puedo visualizarla cuando yo este creando mi
> usuario desde la aplicación en java.
>

si es mejor que generar los ids en PostgreSQL, utiliza secuencias arriba
Mario Gonzalez te dice como utilizarlos, ahora puedes visualizarlos haciendo
las siguientes consultas:

SELECT nextval('nombre_secuencia'); el siguiente valor de la secuencia.

SELECT currval('nombre_secuencia'); el valor actual de la secuencia.

Espero haya sido claro con respecto a mis pretensiones, sino fue asi, espero
> respuesta para ampliar un poco mas mi objetivo y asi obtener su ayuda.
>
>
>
> De antemano muchas gracias, y reciban un cordial saludo…
>

--
Linder Poclaba Lázaro.
Desarrollador Key Optimal Solutions KEYOS.
Usa Software Libre y obtiene tú libertad.


From: "Noe Sereno" <nsereno(at)oestesa(dot)com(dot)mx>
To: "'Mario Gonzalez'" <gonzalemario(at)gmail(dot)com>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: postgres y java
Date: 2006-08-10 15:08:28
Message-ID: 20060810150829.LXKW11929.apk1fe11@Sistemas
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Muchas gracias por haberse tomado la molestia de responderme. Estuve
revisando las posibles soluciones y con respecto a lo que mencionaron de
crear un tipo de dato serial para mis identificadores, tuve un problema y a
continuación se los comento. Como ya tenia creada mi base de datos, intente
modificar mi campo id_usuario porque lo tenia registrado como int4, pero
cuando quise modificar las propiedades de este ultimo, el tipo de dato
SERIAL no me aparece. Acaso debo de crear nuevamente mi estructura? O como
puedo resolver este inconveniente

Nuevamente gracias y disculpen las molestias.


From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Noe Sereno <nsereno(at)oestesa(dot)com(dot)mx>
Cc: "'Mario Gonzalez'" <gonzalemario(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: postgres y java
Date: 2006-08-10 15:47:23
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Noe Sereno escribió:
> Muchas gracias por haberse tomado la molestia de responderme. Estuve
> revisando las posibles soluciones y con respecto a lo que mencionaron de
> crear un tipo de dato serial para mis identificadores, tuve un problema y a
> continuación se los comento. Como ya tenia creada mi base de datos, intente
> modificar mi campo id_usuario porque lo tenia registrado como int4, pero
> cuando quise modificar las propiedades de este ultimo, el tipo de dato
> SERIAL no me aparece. Acaso debo de crear nuevamente mi estructura? O como
> puedo resolver este inconveniente

El tipo serial no es realmente un tipo, es solo una macro que se
convierte en int4, crea una secuencia y luego asigna la funcion
nextval(secuencia) como valor por defecto a esa columna.

No puedes usar el pseudo-tipo SERIAL en un ALTER TABLE para agregar una
columna. Solo puedes usarlo en CREATE TABLE.

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.


From: "Luis Guevara" <luis(dot)a(dot)guevara(at)gmail(dot)com>
To: "Noe Sereno" <nsereno(at)oestesa(dot)com(dot)mx>, "Mario Gonzalez" <gonzalemario(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: postgres y java
Date: 2006-08-11 13:11:56
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Para obtener el último valor generado de una secuencia

Hay alguna diferencia en usar esto:
SELECT currval('nombre_secuencia');

¿ o esto ?
SELECT last_value FROM 'nombre_secuencia';

¿ En todo caso cual es el más recomendable, asegurando una concurrencia alta
?

Gracias.

Atte.
Luis Guevara

El día 10/08/06, Alvaro Herrera <alvherre(at)commandprompt(dot)com> escribió:
>
> Noe Sereno escribió:
> > Muchas gracias por haberse tomado la molestia de responderme. Estuve
> > revisando las posibles soluciones y con respecto a lo que mencionaron de
> > crear un tipo de dato serial para mis identificadores, tuve un problema
> y a
> > continuación se los comento. Como ya tenia creada mi base de datos,
> intente
> > modificar mi campo id_usuario porque lo tenia registrado como int4, pero
> > cuando quise modificar las propiedades de este ultimo, el tipo de dato
> > SERIAL no me aparece. Acaso debo de crear nuevamente mi estructura? O
> como
> > puedo resolver este inconveniente
>
> El tipo serial no es realmente un tipo, es solo una macro que se
> convierte en int4, crea una secuencia y luego asigna la funcion
> nextval(secuencia) como valor por defecto a esa columna.
>
> No puedes usar el pseudo-tipo SERIAL en un ALTER TABLE para agregar una
> columna. Solo puedes usarlo en CREATE TABLE.
>
> --
> Alvaro Herrera
> http://www.CommandPrompt.com/
> The PostgreSQL Company - Command Prompt, Inc.
>
> ---------------------------(fin del mensaje)---------------------------
> TIP 5: ¿Has leído nuestro extenso FAQ?
>
> http://www.postgresql.org/files/documentation/faqs/FAQ.html
>

--
atte.
Luis Guevara


From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Luis Guevara <luis(dot)a(dot)guevara(at)gmail(dot)com>
Cc: Noe Sereno <nsereno(at)oestesa(dot)com(dot)mx>, Mario Gonzalez <gonzalemario(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: postgres y java
Date: 2006-08-11 14:40:40
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Luis Guevara escribió:
> Para obtener el último valor generado de una secuencia
>
> Hay alguna diferencia en usar esto:

Claro, hay una diferencia fundamental. Esto funciona:

> SELECT currval('nombre_secuencia');

Esto no:

> SELECT last_value FROM 'nombre_secuencia';

(Falla en situaciones de concurrencia).

> ¿ En todo caso cual es el más recomendable, asegurando una concurrencia alta
> ?

Usa el unico que SI funciona.

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.


From: "Jaime Casanova" <systemguards(at)gmail(dot)com>
To: "Luis Guevara" <luis(dot)a(dot)guevara(at)gmail(dot)com>
Cc: "Noe Sereno" <nsereno(at)oestesa(dot)com(dot)mx>, "Mario Gonzalez" <gonzalemario(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: postgres y java
Date: 2006-08-11 15:16:47
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

On 8/11/06, Luis Guevara <luis(dot)a(dot)guevara(at)gmail(dot)com> wrote:
> Para obtener el último valor generado de una secuencia
>
> Hay alguna diferencia en usar esto:
> SELECT currval('nombre_secuencia');
>
> ¿ o esto ?
> SELECT last_value FROM 'nombre_secuencia';
>
> ¿ En todo caso cual es el más recomendable, asegurando una concurrencia alta
> ?
>

las secuencias viven mas alla de las transacciones asi que si usas el
segundo te puede retornar valores generados por otras transacciones
que no hayan terminado o que hayan terminado con rollback o
simplemente devolverte un valor que alguien mas genero cuando lo que
tu querias era el ultimo valor que *tu* insertastes.

currval() -- siempre te traera el ultimo valor que tu insertastes en
esta sesion
(solo puede usarse despues de nextval)
nextval() -- siempre te trae el siguiente valor valido mas alla de asi
alguien mas
esta generando valores para la misma secuencia

--
Atentamente,
Jaime Casanova

"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs and the universe trying
to produce bigger and better idiots.
So far, the universe is winning."
Richard Cook


From: "Luis Guevara" <luis(dot)a(dot)guevara(at)gmail(dot)com>
To: "Jaime Casanova" <systemguards(at)gmail(dot)com>
Cc: "Noe Sereno" <nsereno(at)oestesa(dot)com(dot)mx>, "Mario Gonzalez" <gonzalemario(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: postgres y java
Date: 2006-08-11 19:47:52
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Ok. entendido,

Gracias Alvaro y Jaime

2006/8/11, Jaime Casanova <systemguards(at)gmail(dot)com>:
>
> On 8/11/06, Luis Guevara <luis(dot)a(dot)guevara(at)gmail(dot)com> wrote:
> > Para obtener el último valor generado de una secuencia
> >
> > Hay alguna diferencia en usar esto:
> > SELECT currval('nombre_secuencia');
> >
> > ¿ o esto ?
> > SELECT last_value FROM 'nombre_secuencia';
> >
> > ¿ En todo caso cual es el más recomendable, asegurando una concurrencia
> alta
> > ?
> >
>
> las secuencias viven mas alla de las transacciones asi que si usas el
> segundo te puede retornar valores generados por otras transacciones
> que no hayan terminado o que hayan terminado con rollback o
> simplemente devolverte un valor que alguien mas genero cuando lo que
> tu querias era el ultimo valor que *tu* insertastes.
>
> currval() -- siempre te traera el ultimo valor que tu insertastes en
> esta sesion
> (solo puede usarse despues de nextval)
> nextval() -- siempre te trae el siguiente valor valido mas alla de asi
> alguien mas
> esta generando valores para la misma secuencia
>
> --
> Atentamente,
> Jaime Casanova
>
> "Programming today is a race between software engineers striving to
> build bigger and better idiot-proof programs and the universe trying
> to produce bigger and better idiots.
> So far, the universe is winning."
> Richard Cook
>

--
atte.
Luis Guevara