In a test function I set up some testing data in a postgresql database by
first deleting my test user's data and then inserting from a dictionary:
db(db.tag_records.name == user_login['id']).delete()
db.commit()
for tr in trecs:
db.tag_records.insert(**tr)
When this hits the insert I consistently get the following error:
ProgrammingError: ('ERROR', '23505', 'duplicate key value violates
unique constraint "idx_name_tag"')
I've reindexed the whole database but that doesn't seem to help. Strangely,
it seems like this error comes up on the *second* run of the code. In other
words, the first run through the test the rows are deleted and new rows
inserted just fine. It's when the test function runs a second time (there
are several sets of test data) that this error appears.
I've never run into a problem like this before, and I'm not very good with
the internals of postgresql yet. So any help is greatly appreciated.
The table definition looks like this:
db.define_table('tag_records',
Field('name', db.auth_user, default=auth.user_id),
Field('tag', db.tags),
Field('times_right', 'double'),
Field('times_wrong', 'double'),
Field('tlast_wrong', 'datetime', default=dtnow),
Field('tlast_right', 'datetime', default=dtnow),
Field('in_path', db.paths), # was path (reserved term)
Field('step', db.steps),
Field('secondary_right', 'list:string'),
Field('uuid', length=64, default=lambda:str(uuid.uuid4())),
Field('modified_on', 'datetime', default=request.now),
)
db.tag_records.name.requires = IS_IN_DB(db, 'auth_user.id',
db.auth_user._format)
db.tag_records.tag.requires = IS_IN_DB(db, 'tags.id', db.tags._format)
db.tag_records.step.requires = IS_IN_DB(db, 'steps.id', db.steps._format)
db.tag_records.in_path.requires = IS_IN_DB(db, 'paths.id', db.paths._format)
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.