對於任何給定的(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做到這一點? –