在plpgsql中创建一个具有动态数据类型的变量

时间:2016-12-23 04:41:13

标签: postgresql plpgsql


有没有办法在plpgsql函数中声明一个变量,哪个数据类型是在参数上设置的?
例如:

subprocess.call(["ssh","host.example.com","getent", "passwd","dev"], shell=False)

换句话说,我正在尝试编写一个函数,并且在该函数内部我需要一个变量,并且该变量数据类型必须在另一个输入参数中定义。 有任何想法吗? 最重要的是

1 个答案:

答案 0 :(得分:2)

有一种方法 - 您可以使用polymorphic parameters。 PLpgSQL在这个领域受到限制 - 语言被设计为非常静态 - 所以你可以做一些动态的工作,但通常这项工作很难(有时它是设计不愉快的信号)。该变量应在函数参数外声明:

CREATE OR REPLACE FUNCTION public.foo(anyelement)
 RETURNS void
 LANGUAGE plpgsql
AS $function$
BEGIN
  RAISE NOTICE '<<%>>', pg_typeof($1);
END;
$function$

postgres=# SELECT foo(NULL::int), foo(NULL::text);
NOTICE:  <<integer>>
NOTICE:  <<text>>
┌─────┬─────┐
│ foo │ foo │
╞═════╪═════╡
│     │     │
└─────┴─────┘
(1 row)

C语言 - C函数支持完整的环境,你可以在PLpgSQL中做更多的事情。 PLpgSQL专为静态严格的业务流程而设计 - 使用过于动态的代码通常是错误的。