postgresql - 如何获取 postgres 中自定义查询返回的列名和数据类型?

标签 postgresql

如何在 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/

相关文章:

Java 9 JDBC 设置

java - Postgres : connection refused

hibernate - 使用 JPA 和 PostgreSQL 9.0 分组

python - 如何在 PostgreSQL 中将长整数 NUMERIC 转换为位字符串?

postgresql - 如何从 PL/pgSQL 函数返回的 refcursor 中选择所有行?

sql - PostgreSQL 从多个表中选择一个随机行

python - 如何获取()这个属于 userprofile.team 的模型

database - Postgres CREATE EXTENSION 所有数据库

ruby - DataObjects::SQLError 对象的 .code 如何对应于数据库发出的错误?

Postgresql 9.4 级联复制故障转移