Typecheck SQL查询

时间:2014-11-04 19:24:26

标签: sql postgresql typechecking

是否有任何关系数据库可以在运行之前输出查询的返回类型?例如,像GIVE_TYPES SELECT name, age FROM person这样的查询会在不实际执行查询的情况下提供VARCHAR(255), INTEGER之类的结果。如果这不可能,为什么会这样?

EDIT 第一条评论让我意识到我需要提供一个稍微复杂的用例。想象一下,如果查询是这样的:

SELECT parent_name, COUNT(name) FROM person GROUP BY parent_name;

选择所有父母的姓名和他们拥有的子女数量。我希望VARCHAR(255), INTEGER之类的结果也是如此,但是列检查不会让我知道COUNT的返回类型。

2 个答案:

答案 0 :(得分:1)

Count的返回类型始终为int。 http://msdn.microsoft.com/en-us/library/ms175997.aspx

答案 1 :(得分:0)

如果你是在持久性和esqueleto之上运行,那么我认为你不会轻易访问这类信息。特别是,我假设任何无法识别的PostgreSQL类型只是被映射到Haskell字符串或文本。

关于你能做的最好的事情是:

  1. CREATE TEMP TABLE t1 AS LIMIT 0
  2. SELECT * FROM information_schema.columns WHERE table_name ='t1'AND schema_name = ...
  3. DROP TABLE t1;
  4. 您需要为表t1标识临时模式名称(格式为pg_temp_xxx)。

    这个(加上可能对信息模式的一些后续查询以获取类型详细信息)应该为您提供结果集所有列的详细信息。