在这种情况下,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页+没有关于它的消息?
答案 0 :(得分:2)
在PostgreSQL中,'字面'符号用于表示不同类型的数据。例如,以下所有表达式都是正确的,并返回不同类型的有效结果:
select ('123':: bytea)
select ('123':: money)
select ('123':: float)
select ('123':: text)
select ('123':: integer)
select ('123':: json)
...
因此语法'123'
本质上是模糊的,Postgres不提供任何自动转换,至少在当前版本中(以及可能在将来的版本中)。