如何在mysql或postgresql中从information_schema唯一地标识一列?

时间:2019-05-12 06:52:08

标签: mysql postgresql information-schema

我正在寻找保留列的选项卡以及对数据库及其表所做的更改。想要检查列是否已更改,例如数据类型或数字精度已更改。

已经检查了COLUMNS表,但是没有唯一标识列的方法。即没有可用于主键的列。

如何查询信息模式以标识要指定用途的列,并检查是否对其进行了更改?

1 个答案:

答案 0 :(得分:1)

关于INFORMATION_SCHEMA

INFORMATION_SCHEMA由SQL标准定义。因此,如果实施正确,它应该在数据库之间保持一致(PostgresMySQL等)。

COLUMNS表上,以下四个字段一起将唯一地标识每个列实体。

  • TABLE_CATALOG
  • TABLE_SCHEMA
  • TABLE_NAME
  • COLUMN_NAME

INFORMATION_SCHEMA是贴面,用于覆盖用于跟踪元数据的数据库实际表。您可以通过直接查询这些本机定义的表来获取有关该元数据的更多详细信息。例如,在Postgres中,请参见system catalogs。当然,这意味着您必须针对每种数据库实现(Postgres,MySQL等)分别研究和编写查询。

请注意,某些数据库系统支持INFORMATION_SCHEMA,而有些则不支持。请参阅该维基百科页面以获取列表。

主动监控

关于监视此元数据的更改,我不知道执行此操作的任何标准方法。

我怀疑主动监视此元数据的添加,更新和删除将需要您编写特定于每个数据库系统的代码。

有两个想法,但都不是标准的:

  • 查询本地基础对应项的唯一标识符列值,收集这些ID,保留您关注的表和列的当前状态。然后定期查询这些ID,以与您的持久数据进行比较,以查看匹配的内容和更改的内容。
  • 将触发器附加到INFORMATION_SCHEMA表(可能不可能)或它们的本机基础副本中。编写触发代码以将行插入到历史记录/日志表中,或写入日志。