我正在开发一个使用Postgres作为数据库的Rails 3应用程序。我拥有如下所示的表:
Table "public.test"
Column | Type | Modifiers
---------------+---------+-----------
id | integer | not null
some_other_id | integer |
Indexes:
"test_pkey" PRIMARY KEY, btree (id)
"some_other_id_key" UNIQUE CONSTRAINT, btree (some_other_id)
这个表格有两列:
- id,这是主键(由Rails自动创建)
- some_other_id,它包含了另一个系统生成的键。该ID需要是唯一的,因此我在表格上添加了一个唯一键约束。
现在,如果我尝试插入一个带有重复some_other_id
的行,它会失败(很好),并且我会在我的Postgres日志中得到以下输出:
问题在于我的应用程序会尝试添加两个相同的ID,这完全是主线操作,我的日志正在被这个“ERROR”消息淹没,这会导致各种问题:文件占用大量磁盘空间,诊断信息在噪音中丢失,Postgres 必须舍弃诊断信息以保持日志文件的大小限制等。请问有人知道我该如何做才能:
ERROR: duplicate key value violates unique constraint "some_other_id_key"
- 抑制日志,要么抑制所有关于此键的日志,要么通过在尝试进行插入的事务上指定某些内容来抑制日志。
- 使用其他 Postgres 功能来发现重复的键并不尝试进行插入。我听说过规则和触发器,但我无法使它们工作(尽管我不是 Postgres 专家)。
请注意,任何解决方案都需要与 Rails 配合使用,Rails 的插入方式如下:
INSERT INTO test (some_other_id) VALUES (123) RETURNING id;
INSERT INTO test (some_other_id) VALUES (123) RETURNING id;
没有为 id 字段(该字段为 NOT NULL)提供值,因此它应该违反了 id 字段的 NOT NULL 约束。你能给我们提供真实的表定义吗?id 是否是一个序列? - wildplasser