一般识别在 SQLite 中导致约束冲突的 rowid

Generically identify the rowid causing a constraint conflict in SQLite

我需要确定在 INSERT OR IGNORE 语句后导致约束检查失败的行。

我需要这个用于生成 SQL 语句的工具,所以我不能将它与具有特定 table.

的特定用例联系起来

这里的挑战是我不知道为我将插入的特定 table 设置了哪些约束。它可能有外键或 UNIQUE 约束,甚至附加了 CHECK 子句。

所以,我只能从 INSERT 中了解到它失败了。现在,如何判断哪一行破坏了插入?

说明:

我需要一个使用 SQL 语句/表达式的解决方案,即我不能围绕它编写非 SQL 代码。

如果在 SQLite 中不可能的问题:

这可以在 Postgresql 或 MySQL 中完成吗?

示例用例

这是一个使用此功能的示例(请参阅第二个示例和最后指向此问题的注释):

这在理论上是不可能的

并非所有约束失败都涉及正在插入的行之外的数据。例如,CHECK 约束通常不会。在这种情况下将没有要报告的行 ID。

INSERT 可能会使应用于其他 table 中不同行的多个约束失败。你会对哪一个感兴趣?

如果有一种方法可以根据行 ID 找出行所在的 table,我不知道它是什么,所以有原始行 ID 可能用处不大。

最后,行 ID 在 SQLite 中是可选的;您可以使用 WITHOUT ROWID.

创建一个带有行 ID 列的 table