On Mar 13, 2004, at 12:30 PM, Yasir Malik wrote:
For
example, using "create type as" is totally worthless because you can't use
it as a field type in a table; you can't compose in another "create type
as"; and you can't inherit another composite type. The only way to create
a true type is to use "create type" and write C code as a shared object,
so I'm basically doing everything C, which is not something I want to do.
I'm not sure if this is what you are looking for, but it shows how to create a column type based on the text type. So your selects will return the column type as your custom type and you can process the content accordingly. From reading the docs (and asking on the list) I did not think this was possible either without writing external code in C. But a post about something else finally provided the clues I needed to get it working.
Best,
John DeSoi, Ph.D.
====
test=# create or replace function lispin(cstring, oid, int4) returns lisp as 'varcharin' language 'internal' immutable strict;
NOTICE: type "lisp" is not yet defined
DETAIL: Creating a shell type definition.
CREATE FUNCTION
test=# create or replace function lispout(lisp) returns cstring as 'varcharout' language 'internal' immutable strict;
NOTICE: argument type lisp is only a shell
CREATE FUNCTION
test=# create type lisp (input=lispin, output=lispout, internallength=variable);
CREATE TYPE
test=# create table tst (a lisp);
CREATE TABLE
test=# insert into tst (a) values ('1');
INSERT 18499 1
test=# insert into tst (a) values ('(+ 5 5)');
INSERT 18500 1
test=# select * from tst;
a
---------
1
(+ 5 5)
(2 rows)
---------------------------(end of broadcast)--------------------------- TIP 5: Have you checked our extensive FAQ?
http://www.postgresql.org/docs/faqs/FAQ.html