2009-09-15 10 views
8

Wdrażam aplikację rails do heroku, która wykorzystuje PostgreSQL jako back-end. Podczas mojej migracji bazy danych ustawiam pole ID dla rzeczy, które podobają się raporty itp., Na co najmniej 1000, większość klientów wydaje się nie lubić zaczynać od 1.Jak ustawić punkt początkowy dla kolumny klucza podstawowego (ID) w Postgresie poprzez migrację railsów

Zwykle używam mysql i po prostu dodaję sql specyficzne po moim stole kreacja:

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

Czy ktoś wie jak mogę acheive taka sama dla PostgreSQL, idealnie chciałbym migrację do siebie zbudować stół tak, że nie jest DB specyficzny.

Myślę, że głupim sposobem osiągnięcia mojego celu byłoby utworzenie i usunięcie 999 rekordów w pętli, ouch.

Odpowiedz

15

nie mają pojęcia o rubinami i koleje części, ale kwerendy mówisz jest

ALTER SEQUENCE reports_something_seq RESTART 1000; 

Trzeba będzie sprawdzić tabelę dla nazwy sekwencji i dokumentacji postgresql dla kształcenia ogólnego w odniesieniu do tej kwestii; -)

+1

Dzięki zarówno dla aktualizacji, ja po prostu przesunięte w dół zrzut db, wygląda to jedno: UTWÓRZ SEKWENCJĘ numer_artykułu ZDJĘCIE PRZEZ 1 BRAK MAXVALUE NO MINVALUE CACHE 1; – tsdbrown

+0

Tak, możesz ustawić początek w czasie 'CREATE SEQUENCE', w takim przypadku po prostu dodaj" START 1000 "do instrukcji. Ale aby zmienić to później, potrzebujesz polecenia "ALTER", a nie "CREATE". –

+1

Haha dziękuje, nie próbowałem używać polecenia CREATE, podświetlając tylko to, co "zostało" użyte do wygenerowania sekwencji, to jest SQL wygenerowany z pliku migracji. Użyłem ALTER i URUCHOMIĘĆ, jak wspomniałeś, a to zadziałało. Jeśli mam zamiar używać PostgreSQL w aplikacji opartej na produkcji, to na pewno ją przeczytam. – tsdbrown

8

W Postgreach, podobnie jak w wielu innych bazach danych, funkcja automatycznego przyrostu jest wykonywana za pomocą Sekwencji. Dla każdego Serial i polubionych pól sekwencje są tworzone automatycznie przez Postres dla ciebie i nazwane coś jak TABLENAME _ COLUMNNAME _ seq.

Tak, trzeba tylko zmienić odpowiednią sekwencję, tak:

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

hah, zrobiłem ten sam błąd, ale poprawiłem po wyszukaniu '\ h alter sequence' na wszelki wypadek ;-) To' RESTART', a nie 'START'. "START" dotyczy 'UTWÓRZ SEKCJĘ". –

Powiązane problemy