Thread
-
Failed to autoconvert '1' to text.
Szymon Guz <mabewlun@gmail.com> — 2013-09-06T08:13:43Z
Hi, why isn't 'aa' always treated as string? While testing function for levenshtein distance I've noticed that: with x as ( select '1' a, '2' b ) SELECT levenshtein(a, b), length(a) FROM x; ERROR: failed to find conversion function from unknown to text with x as ( select '1'::TEXT a, '2'::TEXT b ) SELECT levenshtein(a, b), length(a) FROM x; levenshtein | length -------------+-------- 1 | 1 (1 row) Why should I cast '1' to '1'::TEXT to satisfy a function (TEXT, TEXT)? thanks, Szymon -
Re: Failed to autoconvert '1' to text.
Richard Huxton <dev@archonet.com> — 2013-09-06T08:33:18Z
On 06/09/13 09:13, Szymon Guz wrote: > Hi, > why isn't 'aa' always treated as string? > with x as ( > select > '1' a, > '2' b > ) > SELECT levenshtein(a, b), length(a) > FROM x; > > ERROR: failed to find conversion function from unknown to text > Why should I cast '1' to '1'::TEXT to satisfy a function (TEXT, TEXT)? I think it's to do with the CTE. Presumably its types get fixed separately from the SELECT levenshtein() call. A quoted literal is type "unknown" until it has a context. It could be a date, point, hstore etc. If you use the literals directly the context lets PostgreSQL figure it out. SELECT levenshtein('1','2'); -- Richard Huxton Archonet Ltd -
Re: Failed to autoconvert '1' to text.
Szymon Guz <mabewlun@gmail.com> — 2013-09-06T08:39:38Z
On 6 September 2013 10:33, Richard Huxton <dev@archonet.com> wrote: > On 06/09/13 09:13, Szymon Guz wrote: > >> Hi, >> why isn't 'aa' always treated as string? >> > > with x as ( >> select >> '1' a, >> '2' b >> ) >> SELECT levenshtein(a, b), length(a) >> FROM x; >> >> ERROR: failed to find conversion function from unknown to text >> > > Why should I cast '1' to '1'::TEXT to satisfy a function (TEXT, TEXT)? >> > > I think it's to do with the CTE. Presumably its types get fixed separately > from the SELECT levenshtein() call. A quoted literal is type "unknown" > until it has a context. It could be a date, point, hstore etc. > > If you use the literals directly the context lets PostgreSQL figure it out. > SELECT levenshtein('1','2'); > > > Yep, I can use literals without any problem, as this function is levenshtein(text, text).