2016-03-03 51 views
0

PostgreSQL是无法与用户在这种情况下那么友善,有没有什么方法可以自动将文字转换为文本来定义为anyelement的参数?

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 

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

也许一些“自动铸造”的文字到文字转换?在pg9 +没有关于它的消息?

+0

您可以使用显式参数类型为您声明重载函数:CREATE FUNCTION foo(anyelement)RETURNS text AS ...; CREATE FUNCTION foo(text)RETURNS text AS ...;' – Abelisto

回答

2

在PostgreSQL中,“文字”符号用于表示不同类型的数据。比如所有的以下表述是否正确,返回不同类型的有效结果:

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

,这样的语法'123'是模棱两可的,Postgres并没有提供任何自动皈依,至少在目前的版本(并可能在未来的版本中)。

+0

谢谢,很好的确认(!)*“不支持”的假设* ...我认为这不仅仅是“无朋友”的问题,一个执行问题:有些情况(例如configs)系统使用文字,函数会执行错误,异常处理对于函数性能和“干净代码”库来说是一个很大的开销。 –

相关问题