Estoy convirtiendo una tabla MySQL en PostgreSQL por primera vez en mi vida y encontrándome con el problema tradicional de novato de no tener autoincremento.Inserciones manuales en una tabla de postgres con una secuencia de clave primaria
Ahora descubrí que la solución postgres es usar una secuencia y luego solicitar nextval() de esta secuencia como el valor predeterminado cada vez que inserta. También he leído que el tipo SERIAL crea automáticamente una secuencia y una clave principal, y que nextval() incrementa el contador incluso cuando se lo llama dentro de las transacciones para evitar bloquear la secuencia.
Lo que no encuentro direccionado es la cuestión de qué ocurre cuando inserta manualmente valores en un campo con una restricción ÚNICA o PRIMARIA y una próximaval() de una secuencia como predeterminada. Hasta donde puedo ver, esto hace que INSERT falle cuando la secuencia alcanza ese valor.
¿Hay una manera simple (o común) de arreglar esto?
Una explicación clara sería muy apreciada.
Actualización: Si usted siente que no debería hacer esto, nunca será capaz de solucionar esto o estoy haciendo algunas suposiciones incorrectas, no dude en señalar hacia fuera en sus respuestas. Por encima de todo, por favor, dime que hacer en lugar de ofrecer a los programadores una base de datos estable y robusto que no puede ser dañado con una inserción sencilla (preferiblemente sin ocultar todo atrás procedimientos almacenados)
Pero eso es solo evitar el problema :) Quiero una base de datos que no falle incluso si alguien hace una inserción con una ID fija donde la predeterminada es una generada. –
Si la ID fija ya existe, es probable que tenga problemas. Lo mejor es no insertar manualmente todo lo que diría. Podría escribir un desencadenador de inserción para llamar a una función que verifica los valores de secuencia y el ID insertado, pero no lo recomendaría. –
¿Por qué no? ¿Cuál es el inconveniente? –