我正在寻找保留列的选项卡以及对数据库及其表所做的更改。想要检查列是否已更改,例如数据类型或数字精度已更改。
已经检查了COLUMNS表,但是没有唯一标识列的方法。即没有可用于主键的列。
如何查询信息模式以标识要指定用途的列,并检查是否对其进行了更改?
答案 0 :(得分:1)
INFORMATION_SCHEMA
INFORMATION_SCHEMA
由SQL标准定义。因此,如果实施正确,它应该在数据库之间保持一致(Postgres,MySQL等)。
在COLUMNS
表上,以下四个字段一起将唯一地标识每个列实体。
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
INFORMATION_SCHEMA
是贴面,用于覆盖用于跟踪元数据的数据库实际表。您可以通过直接查询这些本机定义的表来获取有关该元数据的更多详细信息。例如,在Postgres中,请参见system catalogs。当然,这意味着您必须针对每种数据库实现(Postgres,MySQL等)分别研究和编写查询。
请注意,某些数据库系统支持INFORMATION_SCHEMA
,而有些则不支持。请参阅该维基百科页面以获取列表。
关于监视此元数据的更改,我不知道执行此操作的任何标准方法。
我怀疑主动监视此元数据的添加,更新和删除将需要您编写特定于每个数据库系统的代码。
有两个想法,但都不是标准的:
INFORMATION_SCHEMA
表(可能不可能)或它们的本机基础副本中。编写触发代码以将行插入到历史记录/日志表中,或写入日志。