我的表中有一组复合的 UNIQUE 列。因此,如果我插入到违反唯一键的表中,Postgresql 将返回并出错,我的 PHP 脚本可以读取此错误。
插入时,而不是这样做:
SELECT id FROM table WHERE col1='x' and col2='y'
(if no rows)
INSERT INTO table...
(else if rows are found)
UPDATE table SET...
我更喜欢使用:
INSERT INTO table...
(if error occurred then attempt to UPDATE)
UPDATE table SET...
从上面返回的错误类型将是“错误:重复键值违反唯一约束“xxxxxxxx_key”
但是,如果 INSERT 由于某些其他原因(例如无效数据)失败,则执行 UPDATE 是没有意义的。有没有办法“知道”(来自 PHP/Postgres)如果错误实际上是由于这个重复的密钥问题而不是无效数据而失败的?我只是好奇。如果数据无效,无论如何执行 UPDATE 也会返回错误,但您认为最佳做法是什么?
非常感谢!