存储过程编写教程:http://www.postgres.cn/docs/9.5/plpgsql.html
扩展SQL:SQL函数执行SQL语句的任意列表,返回列表中最后一个查询结果。 在简单情况下(非-集合),将返回最后查询结果的第一行。
另外,一个SQL函数可以声明为返回一个集合(即多行)。 方法是把该函数的返回类型声明为SETOF sometype。 或者等价声明它为RETURNS TABLE(columns)。
SQL函数的函数体应该是一个用分号分隔的SQL语句列表。 最后一个语句后面的分号是可选的。除非函数声明为返回void, 否则最后一条语句必须是SELECT或者INSERT, UPDATE或者有RETURNING子句的 DELETE。
CREATE FUNCTION命令的语法要求函数体写成一个字符串文本。 一般来说,字符串常量使用美元符界定更方便些。 如果你决定使用通常的字符串常量语法,你必须加单引号标记(')和和反斜杠(\)。
CREATE FUNCTION add_em(x integer, y integer) RETURNS integer AS $$
SELECT x + y;
$$ LANGUAGE SQL;
PostgreSQL允许用 SQL 和 C 之外的语言书写用户自定义的函数。 这样的语言通常被称为过程语言 (PLs)。 过程语言函数不是内建于PostgreSQL里的。
它们是通过可加载模块提供的。
触发器函数可以使用大部分可用过程性语言,包括 PL/pgSQL、PL/Python等;一个触发器声明了当执行一种特定类型的操作时数据库应该自动执行一个特殊的函数。
触发器可以被附加到表、视图和外部表。
某些其它数据库系统定义活动的数据库规则,通常是存储过程和触发器。在PostgreSQL中,这些东西可以通过函数和触发器来实现。
规则系统(更准确地说是查询重写规则系统)与存储过程和触发器完全不同。它把查询修改为需要考虑规则,并且然后把修改过的查询传递给查询规划器进行规划和执行。
它非常强大,并且可以被用于许多东西如查询语言过程、视图和版本。 规则系统位于解析器和规划器之间。
PL/pgSQL - SQL过程语言:通过PL/pgSQL,你可以将一整块计算和一系列查询分组在数据库服务器内部,这样就有了一种过程语言的能力并且使 SQL 更易用,但是节省了相当多的客户端/服务器通信开销。
PL/pgSQL是一种块结构的语言。一个函数定义的完整文本必须是一个块。一个块被定义为:
[ <<label>> ]
[ DECLARE
declarations ]
BEGIN
statements
END [ label ];
PL/pgSQL代码中的注释和普通 SQL 中的一样。一个双连字符(--)开始一段注释,它延伸到该行的末尾。一个/*开始一段块注释,它会延伸到匹配*/出现的位置。块注释可以嵌套。
后台工作者线程,逻辑解码,服务器编程接口。