2009-09-15 4 views
8

Sto distribuendo un'app di rotaie a heroku che utilizza PostgreSQL come back-end. Nella mia migrazione del database normalmente settaggio il campo ID per cose come i resoconti ecc. Almeno a 1000, la maggior parte dei clienti non sembra gradire iniziare a 1.Come posso impostare il punto di partenza per la colonna della chiave primaria (ID) in Postgres tramite una migrazione delle rotaie

Normalmente utilizzo mysql e aggiungo semplicemente uno sql specifico dopo la mia tabella creazione:

def self.up 
    create_table :reports do |t| 
     t.references :something 
     ... 
    end 
    execute("ALTER TABLE reports AUTO_INCREMENT = 1000;") 
end 

qualcuno sa come posso acheive lo stesso per PostgreSQL, idealmente vorrei la migrazione di costruire la tabella stessa in modo che non dB specifico.

Immagino che un modo stupido per raggiungere il mio obiettivo sarebbe quello di creare e cancellare 999 record in un ciclo, ahi.

risposta

15

avete idea di rubini e ferrovie parte, ma tua ricerca si sta parlando è

ALTER SEQUENCE reports_something_seq RESTART 1000; 

Si dovrà cercare il vostro tavolo per il nome della sequenza e la documentazione di PostgreSQL per l'istruzione generale per quanto riguarda la materia; -)

+1

Grazie sia per l'aggiornamento, ho appena tirato giù un dump del DB, sembra che questo è l'unico: CREATE SEQUENCE reports_id_seq INCREMENTO PER 1 NO MAXVALUE NO MINVALUE CACHE 1; – tsdbrown

+0

Sì, è possibile impostare l'inizio al momento "CREA SEQUENZA", nel qual caso basta aggiungere "START 1000" all'istruzione. Ma per cambiarlo in seguito è necessario il comando 'ALTER', non' CREATE'. –

+1

Haha grazie, non stavo cercando di usare il comando CREATE, semplicemente evidenziando cosa "era" stato usato per generare la sequenza, cioè l'SQL generato dal file di migrazione. Ho usato l'ALTER e il RESTART come hai detto e ha funzionato come un incantesimo. Se userò Postgres in un'app di produzione, mi assicurerò di leggerlo. – tsdbrown

8

In postgres, come in molti altri database, la funzione di incremento automatico viene eseguita tramite sequenze. Per ogni Serial e i Mi piace, le sequenze di campi sono create automaticamente da Postres per te e nominate qualcosa come TABLENAME _ COLUMNNAME _ seq.

Quindi, è necessario modificare solo la sequenza corrispondente, in questo modo:

ALTER SEQUENCE example_id_seq RESTART 1000 -- corrected from START 
+1

hah, ho fatto lo stesso errore, ma corretto dopo aver osservato '\ h alterare la sequenza 'nel caso in cui ;-) È' RESTART', non 'START'. 'START' è per' CREATE SEQUENCE'. –

Problemi correlati