怎么在PostgreSQL中对函数的拥有者进行修改

  介绍

本篇文章为大家展示了怎么在PostgreSQL中对函数的拥有者进行修改,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

PostgreSQL如何批量修改函数拥有者,默认创建的函数对象的拥有者为当前创建的用户,如果使用postgres超级管理员创建一个测试()的函数,拥有者就是postgres用户。下面讲解下如何批量修改拥有者。

怎么在PostgreSQL中对函数的拥有者进行修改

本文演示的PostgreSQL版本如下:

PostgreSQL 9.6.8

相关视图

要查询PostgreSQL的函数和函数参数需要使用函数视图和参数视图,分别记录了函数信息和参数列表信息。

视图一:information_schema.routines

视图程序包含当前数据库中所有的函数。只有那些当前用户能够访问(作为拥有者或具有某些特权)的函数才会被显示。需要用到的列如下,完整视图讲解请参考官方文档。

名称数据类型备注specific_schemasql_identifier包含该函数的模式名routine_namesql_identifier该函数的名字(在重载的情况下可能重复)specific_namesql_identifier该函数的“专用名“。这是一个在模式中唯一标识该函数的名称,即使该函数真正的名称已经被重载。专用名的格式尚未被定义,它应当仅被用来与指定例程名称的其他实例进行比较。

视图二:information_schema。参数

视图参数包含当前数据库中所有函数的参数的有关信息。只有那些当前用户能够访问(作为拥有者或具有某些特权)的函数才会被显示。需要用到的列如下,完整视图讲解请参考官方文档。

名称数据类型备注parameter_namesql_identifier参数名,如果参数没有名称则为空udt_namesql_identifier该参数的数据类型的名字ordinal_positioncardinal_number该参数在函数参数列表中的顺序位置(从1开始计数)specific_namecardinal_number该函数的“专用名“。详见第35.40节。

注意:可以通过例程。specific_name和参数。specific_name字段关联查询。

单个修改

如果需要修改的函数只有一个,请执行如下SQL语句即可:

如果需要修改的函数只有一个,请执行如下SQL语句即可:

//,无参数函数   ALTER  FUNCTION “abc" !”test" (), OWNER 用“dbadmin";//带参数函数   ALTER  FUNCTION “abc" !”test3" (p1  varchar, p2  varchar), OWNER 用“dbadmin";

批量修改

首先可以查询当前模式下函数的所有者分别是哪个用户,使用下面SQL来查询:

SELECT    n.nspname  as “Schema",   p.proname  as “Name",   pg_catalog.pg_get_function_result (p.oid), as “Result  data  type"   pg_catalog.pg_get_function_arguments (p.oid), as “Argument  data  types"   pg_catalog.pg_get_userbyid (p.proowner), as “称   得到pg_catalog.pg_proc  p   LEFT 才能JOIN  pg_catalog.pg_namespace  n 提醒n.oid =p.pronamespace   LEFT 才能JOIN  pg_catalog.pg_language  l 提醒l.oid =p.prolang   WHERE  pg_catalog.pg_function_is_visible (p.oid)   以及才能n.nspname  & lt;祝辞,& # 39;pg_catalog& # 39;   以及才能n.nspname  & lt;祝辞,& # 39;information_schema& # 39;   ORDER  BY  1,, 2,

当前显示模式“abc”有2个无参函数和1个带参函数,拥有者都是postgres超级用户。

怎么在PostgreSQL中对函数的拥有者进行修改

然后根据上面讲的两个视图:例程和参数关联查询出模式下的所有函数和参数(目的是为了拼接SQL语句),参考如下:

SELECT    “routines" .specific_schema,   “routines" .routine_name,,   合并(“parameters" .parameter_name, & # 39; & # 39;), AS  parameter_name,,,,合并返回参数中的第一个非零的值   合并(“parameters" .udt_name, & # 39; & # 39;), AS  udt_name,   合并(“parameters" .parameter_name, & # 39; & # 39;), | |, & # 39;, & # 39;, | |,合并(“parameters" .udt_name, & # 39; & # 39;), AS 参数,   “parameters" .ordinal_position    得到“information_schema" !”routines"   LEFT  JOIN “information_schema" !”parameters",提醒“routines" .specific_name=皃arameters" .specific_name    WHERE “routines" .specific_schema=& # 39; abc # 39;,   ORDER  BY  1、2、6;

怎么在PostgreSQL中对函数的拥有者进行修改