PostgreSQL函数是什么,我什么时候需要使用它们?

5

我想了解什么是PostgreSQL函数。
什么时候需要编写函数?
如何编写函数?
以及如何调用它们?

3个回答

8

定义,来自维基百科:

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

总的来说,存储过程的优点,来自维基百科:

减少开销: 因为存储过程语句直接存储在数据库中,所以它们可以消除软件应用程序发送内联(动态)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
在PostgreSQL中,存储过程被称为“用户定义函数”。 - filiprem
当前的术语区分“过程”和“函数”。这两者都是“例程”。这里是文档,介绍了现在称为“用户定义过程”的内容。 - M Stefan Walker

2
PostgreSQL可以运行超过十几种编程语言的存储过程,包括Java、Perl、Python、Ruby、Tcl、C/C++以及类似于Oracle的PL/SQL的自身PL/pgSQL。
存储过程的使用取决于您的需求和程序逻辑,我认为只有在某些情况下存储过程才是有用的,而不是必须使用。
我曾在多个数据库服务器应用程序中使用存储过程,在这种情况下,存储过程的使用可能非常有用。例如,如果您有一个需要在另一个数据库服务器类型中运行的查询,则可以在每个数据库服务器中编写存储过程,并从程序中调用它,确保其运行并检索所需的结果集,而不需要更改客户端代码。
要了解如何在PostgreSQL中创建存储过程,请参阅文档的此页面

-1

主要优势是减少网络流量开销。存储过程与业务逻辑或逻辑层几乎相同(不完全相同)。其主要优势是创建动态企业应用程序。由于缺乏动态数据库结构,您可能会发现数百个好产品失败。存储过程、函数、触发器、序列、索引和数据库的关系性质是创建出色应用程序的真正关键。我的公司总是试图通过存储过程来减少客户端逻辑层。大多数关键逻辑都存储在存储过程中,这使得程序员和测试人员感到满意,并满足他们的时间表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接