the composite pkey isn't in the model either: there was no way for us to
identify that :P
On Thursday, March 26, 2015 at 8:28:37 PM UTC+1, Ian W. Scott wrote:
>
> Found the problem. There were two rows with the same combination of 'name'
> and 'tag' values. That didn't violate any constraints on the table
> definition, so normally there was no difficulty. But it violated the
> "unique" constraint on the postgre index that indexed the 'name' and 'tag'
> columns together.
>
> In case it helps anyone else, I stumbled across the bad data by dropping
> the index from the table (directly using postgresql, not via the dal) and
> then trying to re-create the index. Since I was using pgAdmin to do this,
> it gave me an error message identifying the offending combination of values.
>
> Ian
>
> On Wednesday, March 25, 2015 at 6:12:18 PM UTC-4, Ian W. Scott wrote:
>>
>> 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.