Custom type literal conversion - Mailing list pgsql-general

From Chris Bandy
Subject Custom type literal conversion
Date
Msg-id CAMDg7WxSnTtb0UhqS31HWrfHGKnvNrLX1C7ASTSBjJcR5kb8Yg@mail.gmail.com
Whole thread Raw
Responses Re: Custom type literal conversion  (hubert depesz lubaczewski <depesz@gmail.com>)
List pgsql-general
I would like to create a new type for version strings that sorts numerically. The composite type below was quick to write and does not require superuser privileges. However, it doesn't respond to type casts the way I'd like.

Is there a way to implement this type's literal conversion without resorting to a base type?

Thanks
-- Chris

===

=> CREATE TYPE myversion AS (version integer[], build varchar);
CREATE TYPE
=> CREATE OR REPLACE FUNCTION myversion(text)
-> RETURNS myversion AS $$
$>     SELECT
$>         string_to_array(split_part($1, '+', 1), '.')::integer[],
$>         split_part($1, '+', 2);
$> $$ LANGUAGE SQL IMMUTABLE STRICT;
CREATE FUNCTION
=> SELECT myversion('1.0.9+jenkins');
      myversion      
---------------------
 ("{1,0,9}",jenkins)
(1 row)

=> SELECT '1.0.9+jenkins'::myversion;
ERROR:  malformed record literal: "1.0.9+jenkins"
LINE 1: SELECT '1.0.9+jenkins'::myversion;
               ^
DETAIL:  Missing left parenthesis.

pgsql-general by date:

Previous
From: Tom Lane
Date:
Subject: Re: pg_dump: [archiver] -C and -c are incompatible options
Next
From: hubert depesz lubaczewski
Date:
Subject: Re: Custom type literal conversion