You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将MySQL查询转换为PostgreSQL:寻找information_schema.STATISTICS替代方案

PostgreSQL替代MySQL information_schema.STATISTICS实现等效查询

MySQL的information_schema.STATISTICS是其特有的索引信息表,PostgreSQL中没有直接对应的对象,需要通过标准信息_schema表或PostgreSQL系统表来实现相同逻辑。以下是针对你的需求改写的两种PostgreSQL查询方案:

方案一:匹配主键约束(对应MySQL PRIMARY主键逻辑)

如果核心需求是表的主键列为PK(而非严格要求索引名为PRIMARY),推荐使用标准的information_schema.key_column_usage表,兼容性更好:

SELECT t.table_name AS TName
FROM information_schema.tables t
JOIN information_schema.key_column_usage s
  ON s.table_catalog = t.table_catalog
  AND s.table_schema = t.table_schema
  AND s.table_name = t.table_name
  AND s.constraint_type = 'PRIMARY KEY'
  AND s.column_name = 'PK'
  AND s.ordinal_position = 1
JOIN information_schema.columns c
  ON c.table_catalog = t.table_catalog
  AND c.table_schema = t.table_schema
  AND c.table_name = t.table_name
  AND c.column_name = 'VERSION'
WHERE t.table_name LIKE '%\_%'
  AND t.table_schema LIKE '%\_%'
  AND t.table_name != LOWER(t.table_name);

方案二:严格匹配索引名为PRIMARY

如果需要严格对应原MySQL查询中**索引名为PRIMARY**的条件(比如迁移后保留了原索引名称),可以用PostgreSQL的系统表组合查询:

SELECT t.table_name AS TName
FROM information_schema.tables t
JOIN pg_indexes s
  ON s.schemaname = t.table_schema
  AND s.tablename = t.table_name
  AND s.indexname = 'PRIMARY'
JOIN pg_index i
  ON i.indexrelid = (s.schemaname || '.' || s.indexname)::regclass
JOIN pg_attribute a
  ON a.attrelid = (t.table_schema || '.' || t.table_name)::regclass
  AND a.attname = 'PK'
  AND a.attnum = i.indkey[1] -- 匹配索引第一列,PostgreSQL数组下标从1开始
JOIN information_schema.columns c
  ON c.table_catalog = t.table_catalog
  AND c.table_schema = t.table_schema
  AND c.table_name = t.table_name
  AND c.column_name = 'VERSION'
WHERE t.table_name LIKE '%\_%'
  AND t.table_schema LIKE '%\_%'
  AND t.table_name != LOWER(t.table_name);

关键差异说明

  • 转义规则:PostgreSQL中LIKE语句的下划线_只需单个反斜杠\_转义,无需MySQL的双反斜杠。
  • 大小写判断:PostgreSQL中大小写混合的表名是通过双引号创建的,information_schema.tables会保留原大小写,直接用table_name != LOWER(table_name)即可替代MySQL的BINARY比较逻辑。
  • 索引信息获取:
    • information_schema.key_column_usage:ANSI标准表,用于获取主键、外键等约束的列信息,跨库兼容性强。
    • pg_indexes/pg_index/pg_attribute:PostgreSQL特有系统表,能获取更底层的索引细节,适合严格匹配索引名称的场景。

内容的提问来源于stack exchange,提问作者vasu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 06:32:31