Как однозначно идентифицировать столбец из information_schema в mysql или postgresql? - PullRequest
1 голос
/ 12 мая 2019

Я слежу за хранением вкладок столбцов и изменений, внесенных в базу данных и ее таблицы.Хотите проверить, изменился ли столбец, например, изменился ли тип данных или числовая точность.

Проверили по таблице COLUMNS, но нет способа однозначно идентифицировать столбец.то есть там нет столбца, который можно приравнять к первичному ключу.

Как я могу запросить информационную схему, чтобы определить столбец для целевого назначения и проверить, внесены ли в него изменения?

1 Ответ

1 голос
/ 12 мая 2019

О INFORMATION_SCHEMA

INFORMATION_SCHEMA определяется стандартом SQL. Таким образом, при правильной реализации он должен быть согласованным для всех баз данных ( Postgres , MySQL и т. Д.).

В таблицах COLUMNS следующие четыре поля вместе будут однозначно идентифицировать каждый столбец-сущность.

  • TABLE_CATALOG
  • TABLE_SCHEMA
  • TABLE_NAME
  • COLUMN_NAME

INFORMATION_SCHEMA - это шпон, накладывающийся на фактическую таблицу базы данных , используемую для отслеживания метаданных. Возможно, вам удастся получить более подробную информацию об этих метаданных, сделав запрос непосредственно к этим таблицам. Например, в Postgres см. Системные каталоги . Конечно, это означает, что вы должны исследовать и писать запросы отдельно для каждой реализации базы данных (Postgres, MySQL и т. Д.).

Обратите внимание, что некоторые системы баз данных поддерживают INFORMATION_SCHEMA, а некоторые нет. Смотрите на этой странице Википедии список.

Активный мониторинг

Что касается мониторинга изменений в этих метаданных, я не знаю ни одного стандартного способа сделать это.

Я подозреваю, что для активного мониторинга за добавлением, обновлением и удалением этих метаданных потребуется написать код, специфичный для каждой системы базы данных.

На ум приходят две идеи, но ни одна из них не является стандартной:

  • Запросите исходные базовые аналоги для их значений столбцов уникального идентификатора, соберите эти идентификаторы, сохраните текущее состояние таблиц и столбцов, которые вас интересуют. Затем периодически запрашивайте эти идентификаторы для сравнения с вашими постоянными данными, чтобы увидеть, что соответствует и что изменилось.
  • Присоедините триггер либо к INFORMATION_SCHEMA таблицам (вероятно, это невозможно), либо к их собственным базовым аналогам. Запишите код триггера для вставки строк в таблицу истории / регистрации или запись в журнал.
...