2011-11-03 8 views
5

Hace poco migró una base de datos de MySQL a PgSQL 9.Postgresql entorno al lado Identificación escribir en

Pero ahora, cuando intento crear un nuevo objeto (en la administración de Django) me dice que el id Estoy intentando para usar (comenzó en uno y ha aumentado cada vez que lo intenté) ya se usa.

Supongo que hay un puntero o índice que debe establecerse en la última identificación utilizada. ¿Estoy en lo correcto?

+0

Puede establecer el tipo de columna en 'serie' y postgreSQL creará una secuencia automáticamente. – Johan

+0

Estoy casi seguro de que lo es, ya que la tabla está creada por django. – demux

+0

Encontré la respuesta aquí: http://stackoverflow.com/questions/1709705/postgresql-nextval-generating-existing-values ​​ – demux

Respuesta

7

Al definir su mesa, el PostgreSQL equivalente a 'AUTO_INCREMENT' es:

CREATE TABLE foo (
    id SERIAL, 
    ... 
); 

Si ya se ha creado la tabla (como sospecho que lo es), se puede añadir de forma manual:

CREATE SEQUENCE foo_id_seq; 
ALTER TABLE foo ALTER COLUMN id SET DEFAULT nextval('foo_id_seq'); 

Tenga en cuenta que si desea seguir con el nombre predeterminado que Pg habría dado utiliza el siguiente formato para su nombre de la secuencia:

<table name>_<column name>_seq 

Así en mi ejemplo, foo_id_seq.

+0

Ya había una tabla y una secuencia creada por django. Entonces no tuve que crear la secuencia y alterar la tabla. Pero lo que funcionó fue esto: select setval ('uploads_id_seq', 6965); (las subidas son el nombre de la tabla) – demux

2

Si la tabla se migró y utiliza una serie para reemplazar la columna de incremento automático de mysql, es probable que sus datos se hayan migrado sin incrementar la secuencia en serie. Busque la función postgresql setval para establecer su secuencia a un valor superior a la clave existente más alta en su tabla.

+0

Lo encontré aquí: http://www.postgresql.org/docs/current/static/functions-sequence.html Soy nuevo en postgresql; ¿Puedes mostrar un ejemplo? – demux

+0

'SELECT setval ('nameOfSequence', 42);' – Ketema

Cuestiones relacionadas