2

「config」というテーブルに新しいエントリを保存しようとすると、この問題が発生しました。

class Config(models.Model):
    ident = models.CharField(max_length=uuidLength, null=True, editable=False)
    scanner = models.ForeignKey('Scanner')
    name = models.CharField(max_length=64)
   ''' some other fields '''

そしてpostgresはそのようなエラーを出しました(アプリは「pegasus」と呼ばれているので、djangoが与えるテーブル名は実際には「pegasus_config」です):

IntegrityError: duplicate key value violates unique constraint "pegasus_config_scanner_id_name_key"
DETAIL:  Key (scanner_id, name)=(2, ) already exists.

stackoverflow で検索したところ、この解決策が見つかりました。問題は、インデックスをリセットする必要があるテーブルがわからないことです。答えに従って、次のことを行いました。

SELECT setval('pegasus_config_id_seq', (SELECT MAX(id) FROM pegasus_config)+1)

しかし、問題はまだ存在します。また、データベースにアクセスしたところ、「pegasus_config_scanner_id_name_key」が実際にはインデックスであることがわかりました。それで、どのインデックスをリセットするか混乱していますか?助けてください。ありがとう。

4

1 に答える 1

1

次のようなクエリを試して、一意の制約が定義されているテーブルを特定できます。

SELECT  n.nspname as schema_name,
        co.conrelid::regclass as table_name,
        co.conname as constraint_name,
        pg_catalog.pg_get_constraintdef(co.oid, true) as constraing_def
FROM pg_constraint co
INNER JOIN pg_catalog.pg_class cl ON cl.oid = co.conrelid
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = cl.relnamespace
WHERE co.conname = 'pegasus_config_scanner_id_name_key'
AND co.contype = 'u'
于 2013-06-26T16:40:00.580 に答える