sql - 如何在 Postgres 中列出 View 的列?

标签 sql postgresql

对于一个物理表,我一直使用下面的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/

相关文章:

sql - 如何解析字符串并在 SQL 中创建行(postgres)

sql - 从 postgresql 中的表推断行类型

c# - PostgreSQL + C# :Design Time Support in VS2008

mysql - PostgreSQL 查询 : distinct count of jsonb values column

sql - 在 postgresql 中更改多行

sql - 如何在sql server 2008 R2中使用IF条件进行列选择

mysql - 使用 `group by` 键中的函数优化查询?

postgresql - Go SQL语法错误

sql - 每行 Postgresql 函数

node.js - node.js 和 pg 中的嵌套 Promise