From: | Kristo Kaiv <kristo(dot)kaiv(at)skype(dot)net> |
---|---|
To: | pgsql-general(at)postgresql(dot)org |
Subject: | implicit casting bug or feature? |
Date: | 2007-11-15 12:15:01 |
Message-ID: | 5BD06A1B-CC37-4DA6-BD5F-273EAA89DEE5@skype.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
During development i stumbled upon a strange behaviour in 8.2.4
Here is the case:
CREATE TYPE testretval AS (tval text);
CREATE OR REPLACE FUNCTION test() RETURNS testretval AS $$
DECLARE
_r record;
retval testretval%ROWTYPE;
BEGIN
SELECT 'test'::character(20) as tc INTO retval;
RETURN retval;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
orderdb_test=# select '-'||tval||'-' from test();
?column?
------------------------
-test -
Why is this still blank padded? Shouldn't a character(20) -> text
conversion
happen implicitly when the value is selected into the return type
that is declared as text?
The casting to text itself seems to work just fine:
orderdb_test=# select '-'||('test'::character(20))::text||'-';
?column?
----------
-test-
I just want to understand a bit better about the internals of how
this works.
should it use this cast when selecting to the return type?
from casts view i see that:
Source type | Target type |
Function | Implicit?
-----------------------------+-----------------------------
+---------------------+---------------
character | text |
text | yes
Kristo Kaiv
http://kaiv.wordpress.com (PostgreSQL blog)
From | Date | Subject | |
---|---|---|---|
Next Message | Sam Mason | 2007-11-15 12:22:00 | Re: Enforcing Join condition |
Previous Message | Alexander Staubo | 2007-11-15 10:52:46 | Re: Chunk Delete |