查询Redshift中所有模式(含非public)的表、列及数据类型
查询AWS Redshift所有模式下的表、列及数据类型
嘿,要搞定Redshift里全模式的表结构查询?这事儿简单,直接用Redshift内置的information_schema系统视图就能一次性获取所有信息,给你几个实用的查询方案:
基础全量查询(含所有模式)
这个查询会返回所有模式(包括系统模式、public模式和你自定义的所有模式)下的每一张表、每一列及其对应的数据类型,并且按模式、表、列的实际顺序排序:
SELECT table_schema AS "模式名", table_name AS "表名", column_name AS "列名", data_type AS "数据类型" FROM information_schema.columns ORDER BY table_schema, table_name, ordinal_position;
这里的ordinal_position是列在表中的物理顺序,保证结果里的列顺序和你实际建表时的一致,看起来更直观。
过滤掉系统模式(只看用户自定义模式+public)
如果不想看到pg_catalog、information_schema这些系统自带的模式内容,加个WHERE条件过滤就行:
SELECT table_schema AS "模式名", table_name AS "表名", column_name AS "列名", data_type AS "数据类型" FROM information_schema.columns WHERE table_schema NOT IN ('pg_catalog', 'information_schema') ORDER BY table_schema, table_name, ordinal_position;
扩展查询:获取更详细的类型属性
要是你需要更细致的信息(比如字符列的最大长度、数值类型的精度和刻度),可以扩展查询字段:
SELECT table_schema AS "模式名", table_name AS "表名", column_name AS "列名", data_type AS "数据类型", -- 字符类型显示最大长度,数值类型显示精度 COALESCE(character_maximum_length::VARCHAR, numeric_precision::VARCHAR) AS "长度/精度", numeric_scale AS "刻度" FROM information_schema.columns WHERE table_schema NOT IN ('pg_catalog', 'information_schema') ORDER BY table_schema, table_name, ordinal_position;
小提醒
Redshift的系统视图是有权限控制的——如果你是普通用户,只能看到自己有访问权限的表和列。如果发现某些模式/表没出现在结果里,找管理员给你加对应权限就行,比如:
GRANT SELECT ON ALL TABLES IN SCHEMA 你的模式名 TO 你的用户名;
内容的提问来源于stack exchange,提问作者Betsy Curbelo
相关产品推荐
相关产品推荐

