PostgreSQL函数数据类型

时间:2015-05-15 05:21:09

标签: postgresql function variables

如何获取PostgreSQL函数中使用的所有变量的名称和数据类型?在pg_proc中浏览prosrc列是一种方法。有没有更好的一个 - 一些视图以一种易于查询/过滤的格式存储信息? PostgreSQL版本是9.0。

1 个答案:

答案 0 :(得分:2)

不,PostgreSQL中没有内置的方法可以做到这一点。函数体存储为文本字符串,而不将其解析为其组件。您可以 - 显然 - 解析变量名称和数据类型,但需要进行一些严格的解析。

对于PL / pgSQL:

  1. 读取第一个单词(即第一个单词由下一个单词的空格分隔);如果是declare,请继续阅读,直到单词begin
  2. 阅读下一个单词,这是变量的名称。
  3. 读取所有内容,直到逗号,(将一个变量与另一个变量分开)或单词begin(变量结尾),但忽略括号()内的逗号,因为这些符号与初始化变量或数据类型修饰符(例如numeric(8, 2))。这是数据类型,包含所有修改器和任何初始化。
  4. 从上一步骤中读取的文本中,将所有内容解压缩到:=。之前的所有内容都是数据类型和任何修饰符,之后的所有内容都是初始值。
  5. 从第2步开始重复,直至遇到单词begin
  6. 单个程序中可能存在嵌套块,因此您必须对正文中的每个块重复此过程。

    对于其他语言,如PL / Perl,PL / Tcl和PL / Python,您必须根据该语法解析变量。然后还有其他模块与程序语言,如PL / R或PL / Sh,再次有不同的语法。

    这显然不是在查询中使用简单的reg_exp完成的,但需要更高级的逻辑处理。