如何获取postgres中自定义查询返回的列名和数据类型?我们有内置的表/视图功能,但不支持自定义查询。为了更清楚,我会说我需要一个postgres函数,它将sql string作为参数,并将返回colnames及其数据类型。
答案 0 :(得分:1)
我认为没有任何内置的SQL函数可以帮到你。
如果您想纯粹在SQL级别执行此操作,最简单且最便宜的方法可能是CREATE TEMP VIEW AS (<your_query>)
,从目录表中挖出列定义,并在完成后删除视图。但是,这可能会产生非平凡的开销,具体取决于您执行此操作的频率(因为它需要将视图定义写入目录),无法在只读事务中运行,并且无法在备用服务器。
如果适合您的用例,理想的解决方案是在客户端构建准备好的查询,并使用服务器返回的元数据(以RowDescription
消息的形式作为一部分传递query protocol)。不幸的是,这在很大程度上取决于您使用的客户端库,以及它选择公开的信息量。例如,libpq
将允许您访问everything,而JDBC驱动程序将您限制为其ResultSetMetadata
对象上的公共方法(尽管您可以通过其私有字段提取更多信息)反思,如果你足够坚定的话。)
如果您想要一个只读,低开销,独立于客户端的解决方案,那么您还可以编写服务器端C function来准备并通过SPI描述查询。编写和构建C函数有一点学习曲线,但您可以在PGXN或Postgres自己的contrib modules内找到大量示例。