2012-01-05 11 views
58

Sto provando a impostare una sequenza su un valore specifico.Postgres modifica manualmente la sequenza

SELECT setval('payments_id_seq'), 21, true 

Questo dà un errore:

ERROR: function setval(unknown) does not exist

Utilizzando ALTER SEQUENCE non sembra funzionare sia?

ALTER SEQUENCE payments_id_seq LASTVALUE 22 

Come può essere fatto?

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

+3

Sembrerebbe che 'setval()' abbia almeno due argomenti. –

risposta

64

Le parentesi sono fuori luogo:

setval('payments_id_seq', 21, true) 

In caso contrario si sta chiamando setval con un singolo argomento, mentre richiede due o tre.

+0

Hai ragione, grazie – stef

+1

Che cosa significa l'ultimo argomento "true"? – inafalcao

+1

'true' significa che il valore successivo sarà il numero fornito + 1, in questo caso 22.' false' significa che il valore successivo sarà il numero fornito, o 21. Di default, setval si comporterà come se fosse 'true' fu scelto. Maggiori dettagli: https://www.postgresql.org/docs/9.6/static/functions-sequence.html –

8
setval('sequence_name', sequence_value) 
97

Suppongo che in realtà non si stia utilizzando la versione 7.4 PostgreSQL obsoleta e obsoleta e si riferisca solo a questa versione del manuale per errore.

Questa sintassi non è valido per qualsiasi versione di PostgreSQL:


             
  
    ALTER SEQUENCE payments_id_seq LASTVALUE 22 
  

questo dovrebbe funzionare:

ALTER SEQUENCE payments_id_seq RESTART WITH 22; 

ed è equivalente a:

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

Il attualemanual has more.


Per le operazioni ripetute potreste essere interessati a:

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

START [WITH] memorizza un numero di default RESTART, che viene utilizzato per le successive RESTART chiamate senza valore. Hai bisogno di Postgres 8.4 o successivo per l'ultima parte.

Problemi correlati