Search Postgresql Archives

Re: String literal doesn't autocast to text type

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Probably because pg_typeof() returns the OID of a COLUMN in a table def.. Strings literals do not have oid's.

http://www.postgresql.org/docs/9.4/interactive/functions-info.html

"pg_typeof returns the OID of the data type of the value that is passed to it. This can be helpful for troubleshooting or dynamically constructing SQL queries. The function is declared as returning regtype, which is an OID alias type (see Section 8.18); this means that it is the same as an OID for comparison purposes but displays as a type name. For example:"

Please in the future, ALWAYS specify your PostgreSQL version and O/S, regardless of whether or not you thinnk it is pertinent.

On Fri, Mar 4, 2016 at 12:17 PM, Alex Ignatov <a.ignatov@xxxxxxxxxxxxxx> wrote:
Hello!
Why string literal like 'Hello world!' doesnt automagicaly cast to text type?

postgres=# select pg_typeof('Hello world');
 pg_typeof
-----------
 unknown
(1 row)

But for example literal like 1.1 automagically cast to numeric( not float8, float4, whatever)
postgres=# select pg_typeof(1.1);
 pg_typeof
-----------
 numeric
(1 row)

That why we cant do the following without explicit type casting:
postgres=# select t.c||' world' from (select 'Hello' as c) as t;
ERROR:  failed to find conversion function from unknown to text

but that ok:
postgres=# select t.c||' world' from (select 'Hello'::text as c) as t;
  ?column?
-------------
 Hello world
(1 row)

or this is ok too:
postgres=# select t.c::text||' world' from (select 'Hello' as c) as t;
  ?column?
-------------
 Hello world
(1 row)

Sure we can create our cast:
postgres=# create cast (unknown as text) with inout as implicit;
CREATE CAST
and after that we have:
postgres=# select t.c||' world' from (select 'Hello' as c) as t;
  ?column?
-------------
 Hello world
(1 row)

But why we don't have this type cast by default in Postgres? Is there any fundamental restriction on that or there is some reasons for that?


--
Alex Ignatov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company



--
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general



--
Melvin Davidson
I reserve the right to fantasize.  Whether or not you
wish to share my fantasy is entirely up to you.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux