调用Postgres函数

你可以将Postgres函数作为远程过程调用(Remote Procedure Calls)来调用,即你可以从任何地方执行数据库中的逻辑。 函数在逻辑很少更改时非常有用,比如用于密码重置和更新等情况。

下面是一个示例的 Postgres 函数定义:

1create or replace function hello_world() returns text as $$
2  select 'Hello world';
3$$ language sql;

这个函数叫做hello_world,它不带参数,返回一个text类型的结果。函数的逻辑很简单,就是返回字符串"Hello world"。 你可以从任何地方调用这个函数,并获得结果"Hello world"

案例教程

案例1 (调用一个没有参数的Postgres函数)#

1create function hello_world() returns text as $$
2  select 'Hello world';
3$$ language sql;

案例2 (调用一个带参数的Postgres函数)#

1create function echo(say text) returns text as $$
2  select say;
3$$ language sql;

案例3 (批量处理)#

1create function add_one_each(arr int[]) returns int[] as $$
2  select array_agg(n + 1) from unnest(arr) as n;
3$$ language sql;

案例4 (调用带有过滤器的Postgres函数)#

1create table
2  countries (id int8 primary key, name text);
3
4insert into
5  countries (id, name)
6values
7  (1, 'France'),
8  (2, 'United Kingdom');
9
10create function list_stored_countries() returns setof countries as $$
11  select * from countries;
12$$ language sql;

参数说明

  • fn[必要参数]
    FunctionName类型

    要调用的函数名称

  • args[必要参数]
    object类型

    传递给函数调用的参数

  • 选项(option)[必要参数]
    object类型

    命名的参数

      特性
    • count[可选参数]
      exact
      |
      planned
      |
      estimated

      用来计算更新行的计数算法。函数返回的行数。只适用于返回集合的函数

      exact:可以精确计算行数,但执行速度较慢。执行 "COUNT(*)"操作。

      planned:可以快速计算行数,但是结果可能略有偏差。使用了Postgres的统计数据。

      estimated:对于较小的数值使用精确计数,对于较大的数值使用计划计数。根据行数的大小决定使用精确计数或计划计数的算法。

    • head[可选参数]
      boolean类型

      当设置为 "true "时,"data "将不被返回。 如果你只需要计数,则很有用。