There is a way, but it requires some effort: First let's define a schema that reproduces your error:
CREATE TABLE t1 ( id INTEGER PRIMARY KEY); CREATE TABLE t2 ( id INTEGER PRIMARY KEY, id1 INTEGER REFERENCES t1(id) ON DELETE RESTRICT); INSERT INTO t1 (id) VALUES (123); INSERT INTO t2 (id, id1) VALUES (456, 123); -- error: FOREIGN KEY constraint failed DELETE FROM t1 OK, error is reproduced. Now you want to know which foreign key has failed: PRAGMA foreign_keys = OFF; BEGIN TRANSACTION; DELETE FROM t1 -- no error this time PRAGMA foreign_key_check -- table:"t2" rowid:456 parent:"t1" fkid:0 This means that row 456 of table t2 has a broken foreign to table t1. If you want to know which row in t1 can not be deleted: PRAGMA foreign_key_list(t2) -- id:0 seq:0 table:"t1" from:"id1" to:"id" on_update:"NO ACTION" on_delete:"RESTRICT" match:"NONE" OK so id1 in table t2 gives the id of the t1 row which can not be deleted: SELECT id1 FROM t2 WHERE id = 456 -- id1:123 This is row 123 of t1 which can not be deleted. Make sure to rollback the failed transaction, and restore foreign key checks: ROLLBACK PRAGMA foreign_keys = ON Gwendal Roué > Le 10 mai 2017 à 06:57, Mark Wagner <m...@google.com> a écrit : > > Is there a way to get sqlite to tell which foreign key constraint is > causing a failure? Some kind of verbose mode? > > Thanks! > > sqlite> delete from t; > > Error: FOREIGN KEY constraint failed > > sqlite> > _______________________________________________ > sqlite-users mailing list > sqlite-users@mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users