对于一个物理表,我一直使用下面的SQL:
select column_name, data_type, character_maximum_length
from INFORMATION_SCHEMA.COLUMNS
where table_name = 'a_table_name'
我发现这对 View 不起作用。有没有办法通过运行 SQL 命令(而不是通过 psql)来获取 View 的架构。
最佳答案
Postgres 有专门的 System Catalog Information Functions帮助解决这个问题。
获取完整的 View 定义:
SELECT pg_get_viewdef('public.view_name');
模式限定是可选的。如果没有架构前缀,则当前 search_path
设置决定可见性。
快速破解只是:
SELECT * FROM public.view_name LIMIT 0;
根据您的客户端,列名称和类型仍应显示。或者 LIMIT n
也可以获取一些示例值。然后实际执行底层查询(与 LIMIT 0
不同)。
要按顺序列出列及其数据类型,您可以将查询基于 pg_attribute
:
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;
像最大长度这样的类型修饰符以这种方式包含在 data_type
中。
在内部,VIEW
被实现为具有重写规则的特殊表。 Details in the manual here.该表与任何常规表一样保存在系统目录中。
关于转换为 regclass
:
同样的查询也适用于表或物化 View 。取消注释上面的附加过滤器以仅获取表的可见用户列。
关于sql - 如何在 Postgres 中列出 View 的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58020428/