[Pgsql-ayuda] Incremento por defecto
Antonio Castro
acastro@ciberdroide.com
Sun, 17 Mar 2002 09:26:50 +0100 (CET)
On Wed, 13 Mar 2002, Daniel Escobar wrote:
> Hola lista saludos a todos.
> Mi consulta es como obtener en una tabla un
> campo que se incremente por defecto cada vez
> que ingreso una nueva fila de datos.
> La idea es tener un identificador unico para
> cada fila.
Voy a resumir hasta donde yo se pero ruego que alguien me=20
corrija si cometo alg=FAn error.
Para lo que tu preguntas lo m=E1s com=FAn es usar un contador de secuencia.
test=3D> CREATE SEQUENCE contador1 ;
Este objeto tiene asociado unas funciones.
test=3D> SELECT curval('contador1') ; -- Para obtener el valor actual
test=3D> SELECT nextval('contador1') ; -- Para obtener el siguiente valor
test=3D> SELECT setval('contador1', 55 ) ; -- para cambiar su valor
La forma en que se usa es declarando un contador y asociandolo como
valor por defecto en la clave primaria de una tabla.
CREATE SEQUENCE contador1 ;
CREATE tabla_ejemplo (
=09clave int4 DEFAULT nextval('contador1') NOT NULL ,
=09....
=09PRIMARY KEY (clave)) ;
En la clausula de inserci=F3n para la 'tabla_ejemplo' tendr=EDas que omitir
el campo 'clave' para que tome el valor por defecto.
Se puede hacer esto mismo de forma m=E1s simple usando el tipo SERIAL que
crea de forma implicita un contador de secuencia.
CREATE tabla_ejemplo (
=09clave SERIAL NOT NULL ,
=09....
=09PRIMARY KEY (clave)) ;
En la pr=E1tica existe otra t=E9cnica para obtener claves =FAnicas sin tene=
r que
introducirlas cada vez. Se usa para ello el identificador oid. Cata fila
de una tabla posee un valor oid. Hay que consultarlo de forma explicita
ya que usando SELECT * FROM tabla ; no aparece la columna oid. Es decir=20
habr=EDa que hacer SELECT oid, * FROM tabla ; para que aparezca.=20
Todas las tablas tienen oid. Es un valor que no se puede modificar y est=E1
asociado probablemente a la posici=F3n f=EDsica del registro en la tabla.
Se puede referenciar en tablas foraneas mediante int4 o oid. El valor de
oid queda fijado durante la operaci=F3n INSERT o UPDATE sobre un registro.
Este valor no suele respaldado por defecto y por ello resulta=20
imprescindible salvar las tablas con la opci=F3n adecuada (pg_dump -o).
Ambas t=E9cnicas evitan la aparici=F3n de claves duplicadas incluso cuando
se crean simultanemente nuevas claves de forma simultanea desde varios=20
usuarios. No sabr=EDa decir cuales son los pros y los contras de cada=20
t=E9cnica ya que ambas me parecen perfectas.
Un saludo
Antonio Castro
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--=
+
/\ /\ Ciberdroide Inform=E1tica (Tienda de Linux)
\\W// <<< http://www.ciberdroide.com >>>
=09 _|0 0|_ =20
+-oOOO--(___o___)--OOOo----------------------------------------------------=
+=20
| . . . . U U . . . . Antonio Castro Snurmacher acastro@ciberdroide.com =
| =20
| . . . . . . . . . . =
|=20
+()()()----------()()()----------------------------------------------------=
+
| *** 1.700 sitios clasificados por temas sobre Linux en ***Donde_Linux*** =
|
| <<< http://www.ciberdroide.com/misc/donde/dondelinux.html >>> =
|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--=
+