对于任何给定的(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查询。
答案 0 :(得分:2)
使用Postgres(及其JDBC驱动程序),您可以执行以下操作:
class YourCell: UICollectionViewCell {
override var isSelected: Bool {
willSet(newValue) {
let newColor = isSelected ? UIColor.red : UIColor.green
UIView.animate(withDuration: 1, delay: 0.4, options: .curveEaseInOut, animations: {
self.backgroundColor = newColor
}, completion: { _ in
// here the animation is done - nothing to do here probably
})
}
}
}
请注意,您无需在语句中添加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
的调用实际上并不执行查询。
答案 1 :(得分:0)
将SQL语句作为字符串,您是否可以在字符串中添加“LIMIT = 0”并运行修改后的查询?当然,这只会获取列名,但这些可以用于查询类型的信息模式。
如果SQL已包含限制,则可以修改其参数?