2009-09-15 4 views
8

Estoy implementando una aplicación de rieles en heroku que usa PostgreSQL como su back-end. En mi migración de base de datos, normalmente configuro el campo de Id. Para cosas como "Me gusta", etc. hasta al menos 1000, a la mayoría de los clientes no parece gustarle comenzar por 1.¿Cómo puedo establecer el punto de partida para la columna de clave principal (ID) en Postgres a través de una migración de rieles?

Normalmente uso mysql y simplemente agrego un sql específico después de mi tabla la creación:

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

¿alguien sabe cómo puedo acheive la misma para PostgreSQL, idealmente me gustaría que la migración de construir la propia tabla de manera que no es específica dB.

Supongo que una manera tonta de lograr mi objetivo sería crear y borrar 999 registros en un bucle, ouch.

Respuesta

15

no tiene idea acerca rubíes y ferrocarriles parte, pero consulta que estamos hablando es

ALTER SEQUENCE reports_something_seq RESTART 1000; 

Usted tendrá que buscar su mesa para el nombre de la secuencia y la documentación de PostgreSQL para la educación general con respecto a la materia; -)

+1

Gracias tanto para la actualización, he acaban de bajarse un volcado de la db, parece que éste es el lugar: CREAR SECUENCIA reports_id_seq INCREMENTO POR 1 NO MAXVALUE NO MINVALUE CACHE 1; – tsdbrown

+0

Sí, puede configurar el inicio en el tiempo 'CREATE SEQUENCE', en cuyo caso solo agrega' START 1000' a la instrucción. Pero para cambiarlo más adelante, necesitas el comando 'ALTER', not' CREATE'. –

+1

Jaja, gracias, no estaba tratando de usar el comando CREAR, simplemente destacando lo que 'se' ha usado para generar la secuencia, ese es el SQL generado a partir del archivo de migración. Utilicé ALTER y RESTART como mencionaste y funcionó de maravilla. Si voy a usar Postgres en una aplicación basada en producción, me aseguraré de leer sobre ella. – tsdbrown

8

En postgres, como en muchas otras bases de datos, la función de incremento automático se realiza a través de Secuencias. Para cada Serial y los campos Me gusta, las secuencias se crean automáticamente por Postres para usted y se nombran como TABLENAME _ COLUMNNAME _ seq.

lo tanto, usted tiene que apenas alterar la secuencia correspondiente, así:

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

hah, cometí el mismo error, pero corregido después de buscar '\ h alter sequence' por las dudas ;-) Es' RESTART', no 'START'. 'START' es para' CREATE SECUENCE'. –

Cuestiones relacionadas