Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Problema con campo serial y %rowtype en funcion plpgsql

Estas en el tema de Problema con campo serial y %rowtype en funcion plpgsql en el foro de PostgreSQL en Foros del Web. Hola a todos. Imaginenos que tengo una tabla pruebas definida como sigue: create table pruebas (id serial, campo2 integer, valor3 float); En una funcion plpgsql ...
  #1 (permalink)  
Antiguo 12/11/2013, 09:01
 
Fecha de Ingreso: diciembre-2012
Mensajes: 4
Antigüedad: 11 años, 3 meses
Puntos: 0
Pregunta Problema con campo serial y %rowtype en funcion plpgsql

Hola a todos.

Imaginenos que tengo una tabla pruebas definida como sigue:
create table pruebas (id serial, campo2 integer, valor3 float);

En una funcion plpgsql tengo definida una variable

filaPruebas pruebas%ROWTYPE;

en el cuerpo de la funcion asigno valores a los campos:

filaPruebas.campo2:= 7;
filaPruebas.campo3:= 27.3;

Luego hago un :

insert into pruebas select filaPruebas.*;

Problema, da un error porque el campo id no puede ser nulo. En principio lo arregle creando una funcion simple que devuelve el máximo id + 1 o 1 si la tabla esta vacia.

El problema es que si despues de haber ejecutado la funcion ejecuto desde otro sitio intento:
Insert into pruebas (valor2, valor3) values (36, 34.6); da un error de clave duplicada ya que intenta asignar un valor al campo id que ya esta asignado. He buscado en internet y la gente lo soluciona actualizando el id de la secuencia cada vez que actualiza (en mi caso desde la función).

Mi pregunta es: No existe una manera mas elegante de hacer todo esto sin tener que estar preguntando cual es el siguiente cuando se esta utilizando %rowtype. No se que les parece a ustedes pero usar un serial y luego buscar el siguiente a manos me parece un poco extraño.


Saludos
  #2 (permalink)  
Antiguo 12/11/2013, 09:58
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema con campo serial y %rowtype en funcion plpgsql

Una forma mas elegante sería evitar la definición del campo como serial.
Mas bien cambialo a biginteger y con una secuencia, actualizas el valor de filaPruebas.campo1:= secuencia('nextval');

algo asi.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: postgres, serial
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:39.