gpt4 book ai didi

postgresql - postgresql参数多种类型

转载 作者:行者123 更新时间:2023-11-29 14:34:04 25 4
gpt4 key购买 nike

是否可以定义一个 PostgreSQL 函数,该函数可以为同一参数接受多种类型?例如,给定以下函数:

CREATE OR REPLACE FUNCTION foo (
bar INTEGER
)
RETURNS SETOF RECORD AS
...

是否有某种方法可以更改 bar 以也允许数组类型,有点像这样(但我知道这行不通):

CREATE OR REPLACE FUNCTION foo (
bar INTEGER OR INTEGER[]
)
RETURNS SETOF RECORD AS
...

最佳答案

您可以使用多态类型anyelement 和函数pg_typeof(),例如:

create or replace function test(anyelement)
returns text language plpgsql as $$
begin
if pg_typeof($1) = 'integer'::regtype then
return format ('integer: %s', $1);
elsif pg_typeof($1) = 'integer[]'::regtype then
return format ('int array: %s', $1);
else
return format ('other: %s', $1);
end if;
end $$;

select test(1), test(array[1,2]), test('text'::text);

test | test | test
------------+------------------+-------------
integer: 1 | int array: {1,2} | other: text
(1 row)

请注意,当参数是字符串文字时(与具有常规类型参数的函数相反),该函数无法解析参数的类型,例如

select test('1');

ERROR: could not determine polymorphic type because input has type unknown

在典型情况下,两个重载函数将是更好的方法。多态类型有其局限性。

阅读更多关于:

关于postgresql - postgresql参数多种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47617395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com