mysql - 如何在 mysql 或 postgresql 中唯一标识来自 information_schema 的列?

标签 mysql postgresql information-schema

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

已检查 COLUMNS 表,但无法唯一标识列。即那里没有可以等同于主键的列。

我如何查询信息模式来识别指定用途的列并检查是否对其进行了更改?

最佳答案

关于INFORMATION_SCHEMA

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

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/

相关文章:

mysql - 如何获取 MYSQL 数据库中表和 View 的 from 子句中使用的所有表和 View 的列表?

php - 读取 CSV 文件并存入 MySQL 数据库

python - Django 显示前几天的数据

php - 在 MySQL 中搜索和替换 - 数值 [在 WordPress 上]

Postgresql -> 来自简单更新的死锁。我找不到原因

xml - 用大量数据填充 PostgreSQL 数据库

Mysql - 将查询结果用于另一个查询

mysql - 我可以通过直接在 information_schema 表中添加列来在 MySQL 中创建表吗

mysql - 修改 MySQL 查询或在 PHP 中运行

php - 无法使用 PHP 连接到本地 MySQL 服务器