serial primary postgres postgre insertar column autoincrement auto_increment postgresql auto-increment

postgresql - primary - autoincremento postgres no actualizado en insertos de identificación explícitos



postgres column auto_increment (1)

Tengo la siguiente tabla en postgres:

CREATE TABLE "test" ( "id" serial NOT NULL PRIMARY KEY, "value" text )

Estoy haciendo las siguientes inserciones:

insert into test (id, value) values (1, ''alpha'') insert into test (id, value) values (2, ''beta'') insert into test (value) values (''gamma'')

En los primeros 2 insertos, menciono explícitamente el id. Sin embargo, el puntero de incremento automático de la tabla no se actualiza en este caso. Por lo tanto, en la tercera inserción me aparece el error:

ERROR: duplicate key value violates unique constraint "test_pkey" DETAIL: Key (id)=(1) already exists.

Nunca me enfrenté a este problema en Mysql en los motores MyISAM e INNODB. Explícito o no, mysql siempre actualiza el puntero autoincrement basado en la identificación máxima de la fila.

¿Cuál es la solución para este problema en postgres? Lo necesito porque quiero un control más estricto para algunos identificadores en mi mesa.

ACTUALIZACIÓN: lo necesito porque para algunos valores necesito tener una identificación fija. Para otras entradas nuevas, no me importa crear nuevas.

Creo que puede ser posible incrementando manualmente el puntero nextval a max(id) + 1 siempre que inserte explícitamente los identificadores. Pero no estoy seguro de cómo hacer eso.


Así se supone que debe funcionar: next_val(''test_id_seq'') solo se next_val(''test_id_seq'') cuando el sistema necesita un valor para esta columna y usted no ha proporcionado uno. Si proporciona un valor, no se realiza dicha llamada y, en consecuencia, la secuencia no se "actualiza".

Podría solucionar esto setting manualmente el valor de la secuencia después de su última inserción con valores proporcionados explícitamente:

SELECT setval(''test_id_seq'', (SELECT MAX(id) from "test"));