Postgresql 仅对支持类型的列执行类似操作

Postgresql 仅对支持类型的列执行类似操作,postgresql,plpgsql,Postgresql,Plpgsql,[家庭作业] 我编写了一个plpgsql函数,该函数将表名作为该表中每个列的输入,并运行一些涉及LIKE操作符的查询 对于包含类型为integer的列的表,我会得到以下错误,这并不奇怪: 错误:运算符不存在:整数~~未知 这是有意义的,因为LIKE对整数类型没有意义 我可以检查以确保每个列的类型不是integer,date,,但是,对不支持的数据类型进行硬编码(如操作,即不支持“文本”操作)似乎有点不妥。此外,数据库中使用了许多表示某种字符串的自定义数据类型 我想知道什么是解决这个问题的好方法。

[家庭作业]

我编写了一个
plpgsql
函数,该函数将表名作为该表中每个列的输入,并运行一些涉及
LIKE
操作符的查询

对于包含类型为
integer
的列的表,我会得到以下错误,这并不奇怪:

错误:运算符不存在:整数~~未知

这是有意义的,因为
LIKE
对整数类型没有意义

我可以检查以确保每个列的类型不是
integer,date,
,但是,对不支持
的数据类型进行硬编码(如
操作,即不支持“文本”操作)似乎有点不妥。此外,数据库中使用了许多表示某种字符串的自定义数据类型


我想知道什么是解决这个问题的好方法。有没有办法检查某种类型的某个列是否可以支持类似的查询?

不确定是否可以检查某个类型是否一般支持类似运算符,但如果出现错误,您可以始终运行查询并捕获错误

在这种情况下,LIKE运算符抛出
未定义的_函数
错误。您可以在异常块中捕获此错误,然后执行其他操作。请参见此示例函数:

CREATE or replace FUNCTION test() RETURNS void AS
$BODY$
BEGIN      
  BEGIN -- begin of the exception block
    PERFORM 1 LIKE '10'; --  <--this code throws a exception
    EXCEPTION
      WHEN undefined_function THEN
        RAISE WARNING '%', 'could not execute query!';
  END;  -- end of the exception block
END;
$BODY$
LANGUAGE plpgsql;
CREATE或replace FUNCTION test()返回void作为
$BODY$
开始
开始——异常块的开始

像“10”一样表演1;——简单的解决方案是将每一列转换为文本:
column::text
。如果您想了解更多,可以浏览有关运算符、函数、数据类型和类型转换的
information\u schema
信息。对于给定的一对输入数据类型,应该可以确定是否有类似于
实现,或者从支持的类型隐式转换为一种类型,尽管这有点复杂。类
运算符在解析时转换为
~
运算符,因此您必须在
信息模式中查找该运算符。如果
information\u schema
没有所有细节,您可能需要使用
pg\u catalog
表和视图。