我正在研究保留列的选项卡以及对数据库及其表所做的更改。想要检查列是否已更改,例如数据类型或数值精度已更改。
已检查 COLUMNS 表,但无法唯一标识列。即那里没有可以等同于主键的列。
我如何查询信息模式来识别指定用途的列并检查是否对其进行了更改?
最佳答案
关于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
,有些则不支持。请参阅维基百科页面以获取列表。
主动监控
至于监控这个元数据的变化,我不知道有什么标准的方法可以做到这一点。
我怀疑主动监视此元数据的添加、更新和删除将需要您编写特定于每个数据库系统的代码。
我想到了两个想法,但都不是标准的:
- 查询 native 底层对应项的唯一标识符列值,收集这些 ID,保存您关心的表和列的当前状态。然后定期查询这些 ID 以与您的持久数据进行比较,以查看哪些匹配以及哪些发生了变化。
- 将触发器附加到
INFORMATION_SCHEMA
表(可能不可行)或其本地底层对应项。编写触发器代码以将行插入历史记录/日志记录表,或写入日志。
关于mysql - 如何在 mysql 或 postgresql 中唯一标识来自 information_schema 的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56096868/