簡體   English   中英

如何從PostgreSQL查詢中獲取列名和類型(不運行它)?

[英]How to get column names and types from a PostgreSQL query (without running it)?

對於任何給定的(Postgres)SQL查詢,我都必須能夠提取列名和列類型。 我不需要查詢結果。 而且我需要它快速(例如,我不想等待查詢本身完成-尤其是花費幾分鍾或更長時間)。

我以為我有一個解決方案:

為以下查詢提取列和類型:

with X as (
  select nationality, count(*)
  from customers group by nationality
)
select *
from X

我將其包裝如下:

select *
from (
    with X as (
        select nationality, count(*)
        from customers group by nationality
    )
    select *
    from X
) q
where 1 = 0
limit 0

where 1 = 0limit 0情況意味着它將不會運行內容。

但這不起作用

如果customers表很大,則上面的代碼需要一分鍾的時間才能運行。 然后返回0個結果(按預期)。

有任何想法嗎?

是否有任何方法(無需編寫我自己的PSQL解析器)從任意PSQL查詢(無需運行至完成)中獲取列名和類型?

注意:我們的目標是要與任意(用戶輸入的)SQL SELECT查詢一起使用。

使用Postgres(及其JDBC驅動程序),您可以執行以下操作:

PreparedStatement pstmt = con.prepareStatement("select ... ");
ResultSetMetaData meta = pstmt.getMetaData();
for (int i=1; i <= meta.getColumnCount(); i++)
{
  System.out.println("Column name: " + meta.getColumnName(i) + ", data type: " + meta.getColumnTypeName(i));
}

請注意,您不需要在語句中添加where falselimit 0 prepareStatement()的調用實際上並未執行查詢。

給定一條SQL語句作為字符串,您是否不能在字符串中添加“ LIMIT = 0”並運行修改后的查詢? 當然,這只會獲得列名,但是這些列名隨后可用於查詢信息模式中的類型。

如果SQL已經包含限制,可以修改其參數嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM