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

PostgreSQL查询列数据类型返回多条结果,如何判断正确类型

问题描述

我参考了Postgres字段数据类型查询方案,查询表中列的数据类型时,同一列却返回了两个不同的结果,查询语句及返回内容如下:

SELECT column_name, data_type FROM information_schema.columns WHERE 
table_name = 'mytable' AND column_name = 'timestamp';

返回结果:

column_name|data_type               |
-----------|------------------------|
timestamp  |timestamp with time zone|
timestamp  |character varying       |

请问如何确认该列的正确数据类型?它是character varying类型还是timestamp with time zone类型?


解答

问题原因

你查询返回两条不同结果的核心原因是information_schema.columns视图存储了全库所有表的字段信息,你的查询条件仅过滤了表名和列名,没有指定表所属的schema。PostgreSQL支持不同schema下存在同名表,两条结果分别对应不同schema下mytable的timestamp字段类型。

确认正确数据类型的方法

  • 方法1:补全schema过滤条件查询
    执行以下语句可以同时看到字段所属的schema,匹配你实际使用的表对应的schema,就能拿到正确类型:

    SELECT table_schema, column_name, data_type 
    FROM information_schema.columns 
    WHERE table_name = 'mytable' AND column_name = 'timestamp';
    

    如果你明确知道表所在的schema,比如默认的public,可以直接在条件中添加table_schema = 'public'过滤,只会返回一条结果。

  • 方法2:使用psql元命令直接查表结构
    如果你用psql客户端连接数据库,直接执行\d mytable,会输出当前schema下该表的完整结构,包含所有字段的明确类型,不会出现同名表混淆问题。

  • 方法3:直接查询字段真实存储类型
    执行以下语句直接查询该列真实的存储类型,结果唯一不会出错:

    SELECT pg_typeof("timestamp") FROM mytable LIMIT 1;
    

内容的提问来源于stack exchange,提问作者Omari Victor Omosa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:45:09