什么是PostgreSQL函数以及何时使用它们?

时间:2011-11-01 06:59:53

标签: postgresql function

我想知道PostgreSQL的功能是什么 我什么时候写它们? 我该怎么写呢? 我怎么称呼他们?

3 个答案:

答案 0 :(得分:6)

定义,from wikipedia

  

存储过程是应用程序可用的子例程   访问关系数据库系统。

一般存储过程的优点,from wikipedia

  

开销:因为存储过程语句直接存储在   在数据库中,它们可能会删除全部或部分编译开销   这在软件应用程序的情况下通常是必需的   将内联(动态)SQL查询发送到数据库。 (...)

     

避免网络流量:存储过程的主要优势   是他们可以直接在数据库引擎中运行。在一个   生产系统,这通常意味着程序运行   完全在专门的数据库服务器上,可以直接访问   正在访问的数据。这里的好处是网络   通信费用可以完全避免。这变成了   对复杂的SQL语句系列尤其重要。

     

业务逻辑的封装:存储过程允许程序员   将业务逻辑作为API嵌入数据库中,这可以简化   数据管理并减少在其他地方编码逻辑的需要   客户端程序。 (...)

     

访问权限委派:在许多系统中,存储过程都可以   授予执行这些权限的用户对数据库的访问权限   程序不直接有。

     

对SQL注入攻击的一些保护:存储过程可以   用来防止注射攻击。存储过程参数   即使攻击者插入SQL命令,也将被视为数据。 (...)

在PostgresSQL中,存储过程称为用户定义函数。 定义示例:

CREATE FUNCTION somefunc(quantity integer) RETURNS integer AS $$
DECLARE
    myvariable integer := 2;
BEGIN   
    RETURN quantity * myvariable;
END;
$$ LANGUAGE plpgsql;

(您可以使用其他语言在PostgreSQL中定义存储的函数)

调用示例:

SELECT somefunc(100);

更多信息:http://www.postgresql.org/docs/9.1/static/server-programming.html

答案 1 :(得分:2)

  

PostgreSQL以十几种编程语言运行存储过程,包括Java,Perl,Python,Ruby,Tcl,C / C ++和它自己的   PL / pgSQL,类似于Oracle的PL / SQL。

存储过程的使用取决于您的需求,并取决于您的程序的逻辑,在我看来,存储过程仅在某些情况下有用而且永远不会...

我在多数据库服务器应用程序中使用了存储过程,在这种情况下,使用存储过程可能非常有用,例如,如果您有一个需要修改的查询以便在另一个数据库服务器类型中运行,在这种情况下,您可以在每个数据库服务器中编写一个存储过程,并从您的程序中调用它,确保它运行并检索所需的结果集,而无需对客户端代码进行任何更改。

要了解如何在PostgreSQL中创建存储过程,请参阅文档的this page

答案 2 :(得分:0)

主要优点是减少网络流量开销。存储过程与业务逻辑或逻辑轮胎几乎相同(不完全相同)。它的主要优点是动态的企业应用程序。由于缺乏动态的数据库结构,你可以找到100多个好的产品。存储过程,函数,触发器,序列,索引和数据库的关系性质是创建优秀应用程序的真正关键。我公司总是尝试借助存储过程减少客户端逻辑层。大多数关键逻辑都存储在存储过程中,这使得程序员和测试人员感到高兴并满足他们的时间表。