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 函数中,是不是可以检查列值是不是与给定参数值匹配?