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