Postgresql PL/pgSQL-%类型和数组

Postgresql PL/pgSQL-%类型和数组,postgresql,plpgsql,Postgresql,Plpgsql,是否可以同时使用%类型和数组 CREATE FUNCTION role_update( IN id "role".role_id % TYPE, IN name "role".role_name % TYPE, IN user_id_list "user".user_id % TYPE[], IN permission_id_list INT[] ) 这导致了语法错误,但我不想复制任何列类型,因此我想使用“user”。user\u id%type而不是简单的INT,因为这

是否可以同时使用%类型和数组

CREATE FUNCTION role_update(
  IN id "role".role_id % TYPE,
  IN name   "role".role_name % TYPE,
  IN user_id_list "user".user_id % TYPE[],
  IN permission_id_list  INT[]
)
这导致了语法错误,但我不想复制任何列类型,因此我想使用
“user”。user\u id%type
而不是简单的
INT
,因为这样以后修改任何列类型都比较容易。

如手册所述:

列的类型通过写入表\u name引用。列\u name%type。使用此功能有时有助于使函数独立于对表定义的更改

返回
子句中可以使用相同的功能

但从引用的列派生数组类型并没有简单的方法,至少我不知道

关于
以后修改任何列类型


您知道,这种类型的语法只是从表列派生类型的一种语法便利?一旦创建,就不会有任何链接到所涉及的表或列

它有助于保持整个创建脚本的同步。但id对以后数据库中活动对象的更改没有帮助

有关dba.SE的回答:


在函数的参数中使用引用的类型没有意义(在PostgreSQL中),因为它被中间转换为实际类型,并作为实际类型存储。抱歉,PostgreSQL不支持此功能-与此不同的是,在函数中使用引用类型,在会话中每次执行时都会检测到实际类型。

“您知道这种语法类型只是从表列派生类型的语法方便吗?”-是的,我知道。它完全有效,您可以在函数的内部变量中使用
%TYPE