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)