如何在 postgres 中获取自定义查询返回的列名和数据类型?我们有用于表/ View 的内置函数,但没有用于自定义查询。为了更清楚地说明,我会说我需要一个 postgres 函数,它将 sql 字符串作为参数并返回 colnames 及其数据类型。
最佳答案
我不认为有任何内置的 SQL 函数可以为您执行此操作。
如果您想纯粹在 SQL 级别执行此操作,最简单和成本最低的方法可能是 CREATE TEMP VIEW AS (<your_query>)
,从目录表中挖掘列定义,完成后删除 View 。但是,这可能会产生不小的开销,具体取决于您执行此操作的频率(因为它需要将 View 定义写入目录),不能在只读事务中运行,也不能在备用服务器。
如果适合您的用例,理想的解决方案是在客户端构建一个准备好的查询,并利用服务器返回的元数据(以 RowDescription
消息的形式作为query protocol)。不幸的是,这在很大程度上取决于您使用的客户端库,以及它选择公开多少信息。例如,libpq
将使您可以访问 everything ,而 JDBC 驱动程序将您限制在其 ResultSetMetadata
上的公共(public)方法对象(尽管如果您有足够的决心,您可能可以通过反射从其私有(private)字段中提取更多信息)。
如果您想要一个只读、低开销、独立于客户端的解决方案,那么您也可以编写一个服务器端 C function通过 SPI 准备和描述查询.编写和构建 C 函数需要一点学习曲线,但您可以在 PGXN 上找到大量示例,或在 Postgres 自己的 contrib modules 中.
关于postgresql - 如何获取 postgres 中自定义查询返回的列名和数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48638465/