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

Redshift表列可在information_schema.columns查到却不在pg_catalog.pg_table_def的原因咨询

为什么Redshift中pg_catalog.pg_table_def查不到自己创建的表?

这事儿我之前在项目里碰到过,本质是Redshift里这两个系统视图的可见性规则和覆盖范围不一样,主要有这几个常见原因:

  • 临时表的特殊性
    如果你创建的是临时表(用CREATE TEMP TABLE或者带TEMP关键字的建表语句),pg_catalog.pg_table_def默认不会返回临时表的信息,而information_schema.columns是包含临时表的列定义的。这是Redshift对pg_table_def的特定限制——临时表的元数据存储在会话级临时空间里,pg_table_def不会抓取这部分内容。

  • 权限差异导致的过滤
    pg_table_def有个严格的规则:只返回你拥有SELECT权限的表。而information_schema.columns只要你是表的所有者,或者被授予了该表的USAGE等基础权限就能看到列信息。哪怕你是表的创建者,如果不小心执行了REVOKE SELECT ON your_table FROM current_user;这类操作,pg_table_def就会把这张表过滤掉,但information_schema依然能正常查到。

  • Schema权限的隐性影响
    如果你在非默认Schema里创建了表(比如CREATE TABLE my_schema.my_table (...)),即便你是表的所有者,要是没有该Schema的USAGE权限(这种情况很少见,因为建表时通常会自动赋予Schema权限),pg_table_def也可能无法返回表定义,但information_schema.columns还是能正常显示。

你可以先确认自己的表是不是临时表,或者执行GRANT SELECT ON your_table TO your_user;之后再查询pg_table_def,应该就能看到结果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:44:41