Sql 如何在Postgres中列出视图的列?

Sql 如何在Postgres中列出视图的列?,sql,postgresql,Sql,Postgresql,对于物理表,我一直使用以下SQL: select column_name, data_type, character_maximum_length from INFORMATION_SCHEMA.COLUMNS where table_name = 'a_table_name' 我发现这对视图不起作用。是否有办法通过运行SQL命令(而不是通过psql)来获取视图的架构。SELECT a、 地址:, t、 类型名称, a、 atttypmod 来自pg_c类 a.attrelid=c.oid上的

对于物理表,我一直使用以下SQL:

select column_name, data_type, character_maximum_length
from INFORMATION_SCHEMA.COLUMNS
where table_name = 'a_table_name'
我发现这对视图不起作用。是否有办法通过运行SQL命令(而不是通过psql)来获取视图的架构。

SELECT
a、 地址:,
t、 类型名称,
a、 atttypmod
来自pg_c类
a.attrelid=c.oid上的内部连接pg_属性a
t.oid=a.ATTTYPE上的t型内连接pg_
其中c.relkind='v'
和c.relname='put_viewname_here';
注意:由于viewname仅在架构中是唯一的,因此您可能还希望向
pgu名称空间
添加一个
内部联接
,并向where子句添加一个条件


关于你问题的第一个版本:

选择n.name
来自pg_c类
n.oid=c.relnamespace上的内部联接pg_命名空间n
其中c.relkind='v'
和c.relname='put_viewname_here';
注意:这可能会给您提供多个模式,因为一个视图名在一个模式中是唯一的,因此一个视图名并不总是标识一个视图。

Postgres专门为此提供帮助

要获取完整的视图定义,请执行以下操作:

SELECT pg_get_viewdef('public.view_name');
模式限定是可选的。如果没有架构前缀,则当前的
search\u路径
设置决定可见性

要按顺序列出列及其数据类型,您可以根据以下内容进行查询:

类型修饰符(如最大长度)以这种方式包含在
数据类型中

在内部,
视图
被实现为具有重写规则的特殊表。该表与任何常规表一样保存在系统目录中

关于转换为
regclass

同样的查询也适用于表或物化视图。取消对上述附加筛选器的注释,以仅获取表的可见用户列

SELECT attname AS column_name, format_type(atttypid, atttypmod) AS data_type
FROM   pg_attribute
WHERE  attrelid = 'public.view_name'::regclass
-- AND    NOT attisdropped
-- AND    attnum > 0
ORDER  BY attnum;