Uso SELECT lastval() per ottenere un ID seriale errato dopo aver troncato la tabella.La sequenza non viene ripristinata dopo il troncamento della tabella
quando ho troncare la tabella, io uso SELEZIONA lastval(), ho avuto l'ID sbagliato/
Uso SELECT lastval() per ottenere un ID seriale errato dopo aver troncato la tabella.La sequenza non viene ripristinata dopo il troncamento della tabella
quando ho troncare la tabella, io uso SELEZIONA lastval(), ho avuto l'ID sbagliato/
Se si desidera ripristinare la sequenza poi:
setval('sequence_name', 0)
Per elencare l'esistente problema nomi delle sequenze a \ds
al prompt di psql.
Prova
TRUNCATE TABLE table_name
RESTART IDENTITY;
Sarà
Automatically restart sequences owned by columns of the truncated table(s).
dettagli qui: TRUNCATE
ERRORE: errore di sintassi ao vicino a "RESTART" LINEA 1: prodotto tabella troncata RESTART IDENTITY; – user1369887
@ user1369887 Quale versione di PostgreSQL hai? –
La mia versione server è: server 8.3.16 – user1369887
seguito è il modo standard per ripristinare la sequenza:
truncate table table_name restart identity;
ma in qualche ver Sion & piattaforma, è errore di sintassi,
in tal caso, è possibile troncare senza sequenza di reset, e alterare la sequenza con un altro SQL, provate questo:
truncate table table_name;
alter sequence seq_name start 1;
Controllare la prossima
ALTER SEQUENCE sequence_name RESTART WITH 1;
Il modo migliore per reimpostare una sequenza per ricominciare con il numero 1 è eseguire quanto segue dopo averlo troncato correttamente:
ALTER SEQUENCE <tablename>_<id>_seq RESTART WITH 1
Così, per esempio per la tabella degli utenti sarebbe:
ALTER SEQUENCE users_id_seq RESTART WITH 1
Grazie per questo snippet di codice, che potrebbe fornire un aiuto limitato e immediato. Una spiegazione appropriata [migliorerebbe notevolmente] (// meta.stackexchange.com/q/114762) il suo valore a lungo termine mostrando * perché * questa è una buona soluzione al problema e lo renderebbe più utile ai futuri lettori con altre domande simili. Per favore [modifica] la tua risposta per aggiungere qualche spiegazione, incluse le ipotesi che hai fatto. –
Ecco qua ... – jahmed31
Si noti che per l'identificazione programmatica di sequenza di un campo non c'è la funzione pg_get_serial_sequence. selezionare pg_get_serial_sequence ('tablename', 'colname'); –
ID errato significa, non è un valore ID di generazione effettivo. – user1369887