我正在开发一个使用 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 日志中得到以下输出:
ERROR: duplicate key value violates unique constraint "some_other_id_key"
问题是我的应用程序尝试两次添加相同的 ID 完全是主线,并且我的日志被此“错误”消息发送垃圾邮件,这会导致各种问题:文件占用大量磁盘空间,诊断信息丢失噪音,Postgres 必须丢弃诊断以将日志文件保持在大小限制内,等等。
有谁知道我怎么能:
- 抑制日志,或者通过抑制有关此键的所有日志,或者通过在尝试执行
INSERT
. - 使用其他一些 Postgres 功能来发现重复键,而不是尝试
INSERT
. 我听说过规则和触发器,但我都无法工作(尽管我不是 Postgres 专家)。
请注意,任何解决方案都需要使用 Rails,它的插入如下:
INSERT INTO test (some_other_id) VALUES (123) RETURNING id;