PostgreSQL Functions

2025年3月17日 | 阅读 7 分钟

在本节中,我们将了解 PostgreSQL 函数 的工作原理、CREATE FUNCTION 命令,并使用 PostgreSQL 的不同工具(例如 pgadmin4SQL shell (PSQL))查看 PostgreSQL CREATE FUNCTION 命令 的实时示例。

并查看调用 用户定义函数 的示例,例如 位置表示法、命名表示法和混合表示法

什么是 PostgreSQL 函数?

PostgreSQL 函数或 存储过程 是一组 SQL 和过程命令(例如 声明、赋值、循环、流程控制 等),存储在数据库服务器上,可以通过 SQL 接口 调用。它也称为 PostgreSQL 存储过程

我们可以使用多种语言创建 PostgreSQL 函数,例如 SQLPL/pgSQLCPython 等。

它使我们能够在数据库中的一个函数中执行通常需要各种命令和往返的操作。

什么是 PostgreSQL CREATE Function 命令?

在 PostgreSQL 中,如果我们想指定一个新的用户定义函数,我们可以使用 CREATE FUNCTION 命令。

PostgreSQL CREATE Function 命令的语法

PostgreSQL CREATE Function 命令 的语法如下

在上面的语法中,我们使用了以下参数,如下表所示:

参数描述
函数名
  • 函数名 参数用于定义函数名。
  • 函数名写在 CREATE FUNCTION 关键字之后。
[或替换]
  • 如果我们想更改当前函数,我们可以使用 OR REPLACE 关键字。
  • 这是一个可选参数。
函数
  • 使用 OR REPLACE 关键字后,我们可以定义在 函数名 后括号中包含的 函数 参数列表。
  • 一个函数可以包含零个或多个参数。
RETURN
  • 我们可以在 RETURN 关键字之后定义我们将从函数返回的数据类型。
  • 它可以是基本类型、复合类型或域类型,或表列类型的引用。
语言 plpgsql
  • 它用于定义执行函数的程序语言的名称。
  • 并且不仅仅是 plpgsql,PostgreSQL 支持各种程序语言。
函数体
  • 函数体 包含逻辑的可执行部分。

PostgreSQL Create Function 命令示例

让我们看一个不同的示例来理解 PostgreSQL CREATE Function 命令的工作原理。

我们正在使用 PostgreSQL 教程中创建的 Javatpoint 数据库中的 Car 表。

创建一个新函数

在以下命令中,我们正在创建一个新函数,该函数计算 Car_PricePrice_from 和 Price_to 参数之间的 汽车 数量

get_car_Price 函数分为两个主要部分,即 Header 和 Function Body

我们在 Header 部分使用了以下参数

  • 首先,我们将函数名指定为 get_car_Price(),它写在 create function 之后。
  • 之后,get_car_Price() 函数包含两个整数数据类型的参数 Price_fromPrice_to
  • 然后,get_car_Price() 函数检索由 return int 条件定义的整数。
  • 最后,我们将函数语言用作 plpgsql

我们在 函数体 部分使用了以下参数

  • 我们在函数部分使用了以 $$ 开头并以 $$ 结尾的 美元引用字符串常量说明。
  • $$ 符号之间,我们可以放置一个块,其中包含 函数的声明逻辑
  • 在声明块中,我们声明了一个名为 Car_count 的变量,它存储从 Car 中选择的汽车。
  • 在块部分的 body 中,我们使用了 SELECT INTO 命令来选择 Car_Price 值介于 Price_from 和 Price_to 之间的汽车价格,并将输出赋给 Car_count
  • 在块的末尾,我们使用了 RETURN 命令来获取结果。

在 PostgreSQL 中创建函数

在 PostgreSQL 中,我们可以通过两种方式创建函数

  • 使用 pgAdmin 创建 PostgreSQL 函数
  • 使用 SQL Shell 创建 PostgreSQL 函数

使用 pgAdmin 创建 PostgreSQL 函数

我们将按照以下步骤在 pgAdmin 中创建函数:

步骤 1

首先,我们将在本地系统打开最新版本的 pgAdmin,然后转到对象树并连接到我们想要创建函数的 Javatpoint 示例数据库。

步骤 2

之后,我们将通过单击 工具部分 中的 查询工具 来打开查询工具,如下面的屏幕截图所示。

PoatgreSQL Function2

步骤 3

要创建 get_car_Price1() 函数,我们将在 查询工具 中使用上述代码,然后单击 执行 按钮。

执行上述命令后,我们将收到以下消息窗口,显示函数 get_car_Price1() 已成功 创建 到类似数据库中。

PoatgreSQL Function

并且,我们可以在 函数 列表中识别函数 get_car_Price(),如下面的屏幕截图所示。

PoatgreSQL Function

注意:如果无法识别函数名,可以右键单击“函数”节点,然后选择“刷新...”菜单项以刷新函数列表。

PoatgreSQL Function

使用 SQL Shell (psql) 创建函数

我们将按照以下步骤在 psql 中创建表

步骤 1

  • 首先,我们将在本地系统打开 psql,然后连接到我们想要创建函数的数据库。
  • 我们将在 javatpoint 数据库中创建一个表,该表是我们在 PostgreSQL 教程中较早创建的。

步骤 2

  • 要连接数据库,我们将输入以下命令

输出

执行上述命令后,我们将获得以下输出

PoatgreSQL Function

注意:如果我们在 psql 中输入与上面类似的命令来创建函数,它将发出以下错误:函数 get_car_price 已存在相同的参数类型。

PoatgreSQL Function

因此,为了解决这个错误,我们在下一步中创建一个新函数 get_car_Price1()

步骤 3

我们将输入以下命令在 javatpoint 数据库中创建函数 get_car_Price1()

输出

执行上述命令后,我们将得到以下输出,显示 get_car_Price_count1() 函数已成功创建。

PoatgreSQL Function

步骤 4

我们可以使用以下命令列出现有数据库中的所有用户定义函数。

输出

在执行上述命令后,我们将获得以下输出

PoatgreSQL Function

如何调用用户定义函数

在 PostgreSQL 中,我们可以通过以下三种方式调用用户定义函数:

  • 位置表示法
  • 命名表示法
  • 混合表示法

使用位置表示法调用函数

如果我们要以与参数相同的顺序描述参数,我们可以借助 位置表示法 调用函数。

让我们看一个示例来理解 位置表示法 调用特定函数的工作原理。

在下面的示例中,get_car_price() 的参数是 2600070000,这等效于 Price_fromPrice_to 参数。

输出

执行上述命令后,我们将得到以下输出,它检索 car_price26000 到 70000 之间的四行。

PoatgreSQL Function

当函数几乎没有任何参数时,我们可以借助 位置表示法 调用函数。

如果函数包含多个参数,我们可以使用 命名表示法 来调用特定的函数,因为使用 命名表示法 会使函数调用更易于理解。

使用命名表示法调用函数

在下面的示例中,我们展示了使用命名表示法调用 get_car_Price() 函数的工作原理

输出

执行上述命令后,我们将得到以下输出,该输出根据上述 car_price 范围显示四行。

PoatgreSQL Function

在前面提到的表示法中,我们使用 => 来区分参数的 名称和值

PostgreSQL 允许使用为 向后兼容性 而创建的旧语法 :=,如下面的命令所示

输出

执行上述命令后,我们将得到与上面命令的结果相似的输出,其中我们使用 '=>' 而不是 ':='

PoatgreSQL Function

使用混合表示法调用函数

它是 位置表示法和命名表示法 的组合。

让我们看一个示例来理解 使用混合表示法调用函数 的工作原理。

混合表示法 中,我们不能在 位置参数 之前使用 命名参数

例如

在下面的命令中,我们将对 Price_from 参数使用 命名表示法 作为 Price_from=>26000,而对于 Price_to 参数,我们使用 位置表示法 作为 70000,如下面的命令所示。

输出

执行上述命令后,PostgreSQL 会引发错误,提示 位置参数不能跟在命名参数后面

PoatgreSQL Function

为了解决上述错误,我们对 get_car_price() 函数使用 位置和命名表示法,其中 26000 用于表示 位置表示法;另一方面,Price_to=>70000 用于表示 命名表示法

输出

执行上述命令后,我们将得到以下输出,它返回 car_price 在 26000 到 70000 之间的那些汽车。

PoatgreSQL Function

概述

PostgreSQL 函数 部分中,我们学习了以下主题

  • 我们使用了 CREATE Function 命令来为特定表创建用户定义函数。
  • 我们了解了借助不同表示法(例如 位置、命名和混合调用用户定义函数 的过程。

下一主题PostgreSQL 别名