Список SQLite Все внешние ключи в базе данных

Есть ли способ перечисления всех внешних ключей в базе данных SQLite?

Они, похоже, не хранятся в sqlite_master, а PRAGMA foreign_key_list('table') отображаются только по одному.

Альтернативно, есть ли способ указать, какие внешние ключи ссылаются на таблицу?

Ответ 1

С оболочкой SQLite используйте инструкцию .schema и используйте GREP для фильтрации строк, содержащих REFERENCES.

Из shell.c в репозитории SQLite, сегодняшняя версия в trunk, два запроса:

SELECT sql
  FROM (
        SELECT sql sql, type type, tbl_name tbl_name, name name
          FROM sqlite_master
         UNION ALL
        SELECT sql, type, tbl_name, name
          FROM sqlite_temp_master
       )
 WHERE tbl_name LIKE shellstatic()
   AND type != 'meta'
   AND sql NOTNULL
 ORDER BY substr(type, 2, 1), name

и

SELECT sql
  FROM (
        SELECT sql sql, type type, tbl_name tbl_name, name name
          FROM sqlite_master
         UNION ALL
        SELECT sql, type, tbl_name, name
          FROM sqlite_temp_master
       )
 WHERE type != 'meta'
   AND sql NOTNULL
   AND name NOT LIKE 'sqlite_%'
 ORDER BY substr(type, 2, 1), name

Второй вариант - это то, что вы ищете.

Ответ 2

Это взлом, но это работает для нас:

  • используя ваш любимый текстовый редактор, выполните поиск в вашей базе данных (*.db) по следующему: CONSTRAINT

Пример

NotePad++ => Поиск => Найти в файлах => Найти что = CONSTRAINT