如何在PostgreSQL中创建一个检查数据类型兼容性的函数



我正在编写一个程序,它可以跳过错误的加载文件,而不是破坏整个过程。过程的一部分应该检查输入数据和目标表数据类型的数据类型兼容性。在PostgreSQL中检查这一点的函数将非常有用。下面我写了一个函数,应该可以做到这一点;然而,无论输入如何,它每次都会失败。

create or replace function is_type(d varchar, t varchar) returns boolean as $$
begin
perform d::t;
return true;
exception when others then
return false;
end;
$$ language plpgsql;

select is_type('cats', 'varchar(2)');

在本例中,"cats"是4个字符,因此varchar(2(不是兼容的数据类型。基本上,任何插入失败的数据类型都会导致函数失败。这也适用于日期、整数等。

一个简单的代码修改版本:

CREATE OR REPLACE FUNCTION public.is_type(d character varying, t regtype)
RETURNS boolean
LANGUAGE plpgsql
AS $function$
begin
RAISE NOTICE 'TYPE  %', t;
execute 'select cast(' || quote_literal(d) ||' as ' || t || ')' ;
return true;
exception when others then
return false;
end;
$function$
;
select is_type('cats', 'varchar(2)');
NOTICE:  TYPE  character varying
is_type 
---------
t
(1 row)
select is_type('cats', 'numeric');
NOTICE:  TYPE  numeric
is_type 
---------
f
(1 row)

相关内容

最新更新