PostgreSQL-创建从文本到整数的转换会抛出max_stack_depth错误

时间:2018-12-13 16:00:39

标签: postgresql casting

在PostgreSQL 10中,我需要执行这样的SQL命令:

select id from table1 where id='859'::text

当然会导致错误,所以我创建了这样的CAST:

CREATE FUNCTION to_int(text) 
  RETURNS integer 
  STRICT IMMUTABLE LANGUAGE SQL AS 
'SELECT cast($1 as integer);';

CREATE CAST (text AS integer) WITH FUNCTION to_int(text) as Implicit;

但是,在执行select id from table1 where id='859'::text命令后,PostgreSQL抛出异常max_stack_depth。 知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您的通话是无限递归的。在演员表功能中,您调用演员表。

您会收到错误消息,因为此无限循环达到了最大可能的递归深度。

阅读this old blog post,了解如何正确创建这样的演员表。

但是,最好的办法是不要这样做并修复您的代码。删除这些演员表是有原因的;他们会产生歧义。