with update setval postgres modify create postgresql sequence

postgresql - update - Postgres altera manualmente la secuencia



setval postgresql (4)

Esta sintaxis no es válida en ninguna versión de PostgreSQL:

ALTER SEQUENCE payments_id_seq LASTVALUE 22

Esto funcionaría:

ALTER SEQUENCE payments_id_seq RESTART WITH 22;

y es equivalente a:

SELECT setval(''payments_id_seq'', 22, FALSE);

Más en el manual actual para ALTER SEQUENCE y funciones de secuencia .

Para operaciones repetidas, es posible que le interese:

ALTER SEQUENCE payments_id_seq START WITH 22; -- set default ALTER SEQUENCE payments_id_seq RESTART; -- without value

START [WITH] almacena un número predeterminado de RESTART , que se utiliza para las llamadas de RESTART subsiguientes sin valor. Necesita Postgres 8.4 o posterior para la última parte.

Estoy tratando de establecer una secuencia a un valor específico.

SELECT setval(''payments_id_seq''), 21, true

Esto da un error:

ERROR: function setval(unknown) does not exist

¿Usar ALTER SEQUENCE tampoco parece funcionar?

ALTER SEQUENCE payments_id_seq LASTVALUE 22

¿Cómo puede hacerse esto?

Ref: http://www.postgresql.org/docs/7.4/interactive/functions-sequence.html


Los paréntesis están fuera de lugar:

setval(''payments_id_seq'', 21, true)

De lo contrario, estás llamando a setval con un solo argumento, mientras que requiere dos o tres.


Use select setval(''payments_id_seq'', 21, true);

setval contiene 3 parámetros:

  • El primer parámetro es sequence_name
  • El segundo parámetro es Next nextval
  • El tercer parámetro es opcional.

El uso de verdadero o falso en el 3er parámetro de setval es el siguiente:

SELECT setval(''payments_id_seq'', 21); // Next nextval will return 22 SELECT setval(''payments_id_seq'', 21, true); // Same as above SELECT setval(''payments_id_seq'', 21, false); // Next nextval will return 21

La mejor manera de evitar la codificación del nombre de secuencia, el siguiente valor de secuencia y manejar la tabla de columna vacía correctamente, puede usar la siguiente manera:

SELECT setval(pg_get_serial_sequence(''table_name'', ''id''), coalesce(max(id), 0)+1 , false) FROM table_name;

donde table_name es el nombre de la tabla, id es la primary key de la tabla


setval(''sequence_name'', sequence_value)