PostgreSQL中的函数中是不是有命名参数的约定

Posted

技术标签:

【中文标题】PostgreSQL中的函数中是不是有命名参数的约定【英文标题】:Is there a convention for named arguments in a function in PostgreSQLPostgreSQL中的函数中是否有命名参数的约定 【发布时间】:2014-08-04 13:17:41 【问题描述】:

我来自 SQL Server 背景,在存储过程中使用/鼓励使用“@”符号。这很有用,因为您可以轻松查看什么是列以及什么是值。例如。

CREATE PROCEDURE Foo
    @Bar    VARCHAR(10),
    @Baz    INT
AS
BEGIN
    INSERT INTO MyTable (
        Bar,
        Baz)
    VALUES (
        @Bar,
        @Baz)

END

我知道我可以只使用序数位置,但我们的一些存储过程有 20 个左右的参数,命名参数使其在 IMO 中更易读。

PostgreSQL 社区是否有某种约定用于前缀?我试图找出命名参数的确切规则,但我的谷歌搜索没有产生任何结果。

【问题讨论】:

我想知道命名参数的命名约定是什么,或者人们如何避免列名和值的歧义。我们有一些带有 20 个参数的存储过程,使用 $1、$17 等会很痛苦 在 Oracle PL/SQL 中,一种非常广泛使用的约定是 p_-prefix。 (这个问题最初被错误地标记了。) 我已经开始尝试将$ 附加到我的变量名上,例如foo$。它不像 MSSQL @foo 那样清晰,但它确实遵循一种模式,并且是可读的。就我个人而言,我发现像p_foo 这样的命名约定既乏味又不可读。 【参考方案1】:

参数标识符遵循与其他标识符相同的规则:

http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

http://www.postgresql.org/docs/current/static/xfunc-sql.html#XFUNC-SQL-FUNCTION-ARGUMENTS

以下划线 _ 开头的参数标识符很常见,我认为这是有道理的,尽管这不是惯例。

也可以通过用函数名限定标识符来避免歧义

my_funtion.my_parameter

【讨论】:

我也在不知不觉中选择了下划线。我真的不想重复重复函数名。 我也喜欢下划线下划线,因为当参数名称与表列名称冲突时,大多数数据库会感到非常困惑(假设没有人被误导到使用前导下划线命名列 - 我已经看到它完成了)

以上是关于PostgreSQL中的函数中是不是有命名参数的约定的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PostgreSQL 13 中使用 INOUT 参数调用存储过程(不是函数)

PostgreSQL 函数中的 psql 变量是不是有任何转义语法?

在 PostgreSQL 函数中,是不是可以检查列值是不是与给定参数值匹配?

重命名postgresql数据库中的列名

如何获取 PostgreSQL 数据库中的函数列表及其参数?

如何查找 PostgreSQL 中是不是存在函数?