在PostgreSQL中描述结果集?

时间:2014-09-17 20:24:06

标签: sql-server postgresql

在Microsoft Sql Server中,有一个proc sys.sp_describe_first_result_set,它接受​​一个任意的sql查询字符串,并返回描述结果集中类型的数据,如果要执行的话。注意,这是描述复杂查询的结果,而不是表。 MSDN reference

Postgres有什么相似之处吗?

2 个答案:

答案 0 :(得分:0)

at the protocol level - 以Describeextended query protocol消息的形式提供{{3}}。

我不知道任意SQL字符串的任何SQL级别的等价物。但是好主意;在pgsql-general上提高它。我怀疑它很容易实现。

事实上,快速查看exec_describe_statement_message中的src/backend/tcop/postgres.c表示大脑位于SendRowDescriptionMessage中的src/backend/access/common/printtup.c。编写一个简单的C扩展来完成类似的工作并生成结果集应该不难。如果您熟悉代码库,希望工作几个小时;这个想法将是:

  • 将SQL字符串输入解析器/重写器/规划器以获取计划
  • 查找顶级节点的目标列表(如果有)。这将是DML的RETURNING节点,或Query的顶级SELECT tlist。
  • 将tlist输入ExecTypeFromTL
  • 遍历tupledesc条目,通过在tlist中查找它们来跳过resjunk列,并为查询中的每个非resjunk输出发出一行。

答案 1 :(得分:0)

我尝试通过创建存储过程来创建temperory view,然后在删除视图之前检查information_schema.columns。