Re: User defined data type

From: Martijn van Oosterhout <kleptog(at)svana(dot)org>
To: Don Y <pgsql(at)DakotaCom(dot)Net>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: User defined data type
Date: 2006-03-30 19:42:37
Message-ID: 20060330194237.GD16142@svana.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Thu, Mar 30, 2006 at 11:51:41AM -0700, Don Y wrote:
> - I assume I don't have to check the return value from
> palloc()? (All of the src/backend/utils datatypes
> seem to trust it implicitly) BTW, where is the interface
> to palloc() et al. documented (or, is it a case of "Use
> the Source, Luke"?)

You don't have to check.

src/backend/utils/mmgr/README

> - *Somewhere*, I saw a reference claiming functions (and
> the sources thereof?) had to fit in an 8KB "page" (?)
> as they are stored in the database. But, empirical
> observation seems to refute that (perhaps it was true
> in an older release?) Are there any such limits?

Maybe a long time ago, but not any longer.

> - Aside from the in and out functions, all I've defined
> for *this* data type are the <, <=, =, >=, >, <> operators
> and a comparison function. It is my understanding that
> these are needed to support keys/indexes on that data type.
> Is this true? I.e. if can I discard some of these if I
> am willing to live without keys, etc.? Are there other
> things that I need to add (or should consider adding)?

They're needed for btree indexes. If you don't want them, you don't
need them.

> - How do I create functions to perform typecasts? For
> example, *assume* an int4 could be cast to an "isbn"...
> where would that function be implemented?

Create the function and then use CREATE CAST.

> - This data type contains some redundant information not
> needed for the various operators mentioned above. Does
> that get in the way of anything? I.e. it is my understanding
> that the in and out routines are *all* that is needed to
> preserve/transport that "redundant" information to a new
> table/database/etc.

Yes. You specify the size or use a varlena structure. PostgreSQL
doesn't try to look inside it.

> - If not explicitly listed, does the server *assume* things
> like NEGATOR of <= is >? Or, COMMUTATOR of <= is >=? Or,
> are these attributes simply "not present" unless explicitly
> defined?

Nope, you need to specify, see the CREATE OPERATOR documentation.

> - Can *_in() be ever invoked with a NULL argument? Or, can I
> safely assume that the pointer I am passed is valid?

You can't get a NULL there. Yes, the pointer is valid cstring.

> - Wish list item: errdetail(va_list arg) et al. functions (Yeah,
> I can write my own... but it would be nice if this was part
> of the error reporting routines).

Can't help you there.

Tip: there are various README files scattered around the source tree.
Read them.

Have a nice day,
--
Martijn van Oosterhout <kleptog(at)svana(dot)org> http://svana.org/kleptog/
> Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a
> tool for doing 5% of the work and then sitting around waiting for someone
> else to do the other 95% so you can sue them.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2006-03-30 20:21:00 Re: User defined data type
Previous Message Tom Lane 2006-03-30 19:00:11 Re: How to concat strings so that trailing spaces remain