I have a postgreSQL / psycopg2 DB generated by my Django model with a single user table (normally read-only) that will be updated via batch job about once a week. The PK is the autogenerated 'id' field; however in postgreSQL the generated field is of type 'integer' rather than type 'serial' which is the postgreSQL auto-incrementing type. So, in my batch update job (no Django involved here) I tried to:
INSERT INTO tablename (a, b, c) VALUES ('aa', 'bb', 'cc') but it complained about a 'duplicate PK error' on id. I found that the sequence 'tablename_id_seq' was not being updated, since it's not a 'serial' field. What I ended up doing: First time through the update/insert loop, set the auto-increment sequence counter: SELECT setval('tablename_id_seq', (SELECT max(id) from tablename)) which ensures that the sequence starts at the proper spot; then for each INSERT: INSERT INTO tablename (id, a, b, c) VALUES (nextval('tablename_id_seq'), 'aa', 'bb', 'cc') So, a couple questions: 1) is it a bug that 'id' is generated as an 'integer' rather than 'serial' type? 2) Is there a way to get Django's model to generate a 'serial' 'id' column that is designated as the PK, so I don't have to explicit specify the 'id' value in my INSERT? 3) Failing that, is there a better way to do the raw SQL steps outlined above? Thanks, Ken -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-us...@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=.