对于任何给定的(Postgres)SQL查询,我需要能够提取列名称和列类型。我不需要查询的结果。我需要它很快(即我不希望等待查询本身完成 - 特别是如果需要几分钟或更长的时间)。如何从PostgreSQL查询中获取列名和类型(不运行它)?
我想我有一个解决方案:
要提取列和类型下面的查询:
select *
from (
with X as (
select nationality, count(*)
from customers group by nationality
)
select *
from X
) q
where 1 = 0
limit 0
和:
with X as (
select nationality, count(*)
from customers group by nationality
)
select *
from X
我将如下把它包where 1 = 0
和limit 0
意味着它不会运行内容。
但它不工作
如果customers
表是巨大的,那么上述接管一分钟运行。然后返回0结果(如预期)。
任何想法?
是否有任何方法(无需编写我自己的PSQL解析器)从任意任意PSQL查询中获取列名和类型(无需运行它即可完成)?
注意:目标是为了与任何(用户输入的)SQL SELECT查询一起工作。
例如,可能用Java/JDBC和PreparedStatement(至少在Postgres中,我不知道Redshift驱动程序是否支持这个 - 这两个完全不同) –
是的,[protocol](https://www.postgresql.org/ docs/8.0/static/protocol-flow.html#AEN56097)允许您在没有实际执行任何内容的情况下获取RowDescription,但您的客户端库是否暴露此问题是另一个问题。 –
嘿@a_horse_with_no_name。你如何使用JDBC为Postgres做到这一点? –