函数f1() – 语言sql
create or replace function f1(istr varchar) returns text as $$ select 'hello! '::varchar || istr; $$language sql;
函数f2() – 语言plpgsql
create or replace function f2(istr varchar) returns text as $$ begin select 'hello! '::varchar || istr; end; $$language plpgsql;
>这两个函数都可以像选择f1(‘world’)或者选择f2(‘world’)一样调用.
>如果我调用选择f1(‘world’),输出将是:
`hello! world`
>输出为f2(‘world’):
ERROR: query has no destination for result data
HINT: If you want to discard the results of a SELECT,use PERFORM instead.
CONTEXT: PL/pgsql function f11(character varying) line 2 at sql statement
****** Error ******
>我想知道差异,在哪种情况下我应该使用语言sql或语言plpgsql.
关于功能的任何有用的链接或答案将不胜感激.
SQL functions是更好的选择:
对于简单的标量查询没有太多的计划,更好地节省任何开销.
>对于每个会话的单个呼叫.没有什么可以从PL / pgsql提供的计划缓存和准备语句中获得.见下文.
>如果它们通常在更大的查询的上下文中调用,并且足够简单,可以内联.
>由于缺乏PL / pgsql等程序语言的经验.许多人都很熟悉sql,而且这就是sql函数所需要的全部.很少有关于PL / pgsql的说法.
>一个更短的代码.没有开销.
PL/pgSQL functions
是更好的选择:
>当您需要任何sql函数中不可用的过程元素或变量时,显然.
>对于任何类型的动态sql,您在哪里构建和EXECUTE
语句动态.需要特别注意避免sql注入.更多细节:
> Postgres functions vs prepared queries
>当您有几个可以在多个地方重复使用的计算,并且CTE无法伸缩时.在sql函数中,您没有变量,将被强制重复计算或写入表. dba.SE中的相关答案具有并行代码示例,用于使用sql函数/ plpgsql函数/具有CTE的查询来解决相同的问题:
> How to pass a parameter into a function
作业比其他程序语言要贵一些.调整不需要使用更多分配的编程风格.
>当一个函数不能内联并被重复调用时.与sql功能不同,query plans can be cached for all SQL statements inside a PL/pgSQL functions;它们被视为准备好的语句,该计划在同一会话中被缓存以重复调用(如果Postgres预期缓存(通用)计划的执行效果比每次都重新计划,这就是为什么PL / pgsql函数通常更快的原因在这种情况下的第一个电话.
线程上的pgsql性能讨论了以下这些项目:
Re: pl/pgsql functions outperforming sql ones?
>当你需要trap errors.
>对于trigger procedures(也只是功能).
还要考虑:
> PostgreSQL Stored Procedure Performance
总结以上是内存溢出为你收集整理的PostgreSQL函数中的语言sql和语言plpgsql的区别全部内容,希望文章能够帮你解决PostgreSQL函数中的语言sql和语言plpgsql的区别所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)