是否有任何方法可以自动将文字转换为定义为anyelement的参数的文本?

时间:2016-03-03 09:31:24

标签: postgresql casting

在这种情况下,PostgreSQL对用户不太友好,

CREATE FUNCTION foo(anyelement)  RETURNS text AS $$
   SELECT 'The type is ' || pg_typeof($1); 
$$ LANGUAGE SQL IMMUTABLE;

SELECT foo(123); -- OK
SELECT foo('123'::text); -- OK
SELECT foo('123'); -- ERROR

有一个“选项”,一个(低成本)解决方法,以避免这种中断?

也许某些“自动投射”用于文字到文字的转换?在第9页+没有关于它的消息?

1 个答案:

答案 0 :(得分:2)

在PostgreSQL中,'字面'符号用于表示不同类型的数据。例如,以下所有表达式都是正确的,并返回不同类型的有效结果:

select ('123':: bytea)
select ('123':: money)
select ('123':: float)
select ('123':: text)
select ('123':: integer)
select ('123':: json)
...

因此语法'123'本质上是模糊的,Postgres不提供任何自动转换,至少在当前版本中(以及可能在将来的版本中)。