[英]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 = 0
且limit 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 false
或limit 0
。 對prepareStatement()
的調用實際上並未執行查詢。
給定一條SQL語句作為字符串,您是否不能在字符串中添加“ LIMIT = 0”並運行修改后的查詢? 當然,這只會獲得列名,但是這些列名隨后可用於查詢信息模式中的類型。
如果SQL已經包含限制,可以修改其參數嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.