Thread: domain usage

domain usage

From
Bruno Wolff III
Date:
I have a question about the use of domains in 7.3.
Will I be able to use them to catch mistakes in doing comparisons
or value setting between objects with the same underlying type but
in different domains (without doing an explicit type cast)?

Re: domain usage

From
Tom Lane
Date:
Bruno Wolff III <bruno@wolff.to> writes:
> I have a question about the use of domains in 7.3.
> Will I be able to use them to catch mistakes in doing comparisons
> or value setting between objects with the same underlying type but
> in different domains (without doing an explicit type cast)?

No, I don't think so.  It certainly doesn't work at the moment:

regression=# create domain d1 int4;
CREATE DOMAIN
regression=# create domain d2 int4;
CREATE DOMAIN
regression=# select '1'::d1 = '1'::d2;
 ?column?
----------
 t
(1 row)


The reason it doesn't work is that d1 and d2 are treated as
binary-compatible with int4, so the int4 = operator is found and
applied.

If we did not have this binary-compatibility behavior, domains would be
near useless, because out-of-the-box they'd have no applicable functions
or operators at all.  Do you want to have to issue a ton of CREATE
FUNCTION and CREATE OPERATOR commands for every domain you make?

            regards, tom lane

Re: domain usage

From
Bruno Wolff III
Date:
On Sun, Jul 14, 2002 at 14:58:14 -0400,
  Tom Lane <tgl@sss.pgh.pa.us> wrote:
>
> The reason it doesn't work is that d1 and d2 are treated as
> binary-compatible with int4, so the int4 = operator is found and
> applied.
>
> If we did not have this binary-compatibility behavior, domains would be
> near useless, because out-of-the-box they'd have no applicable functions
> or operators at all.  Do you want to have to issue a ton of CREATE
> FUNCTION and CREATE OPERATOR commands for every domain you make?

Certainly not. I wanted a way to catch dumb mistakes earlier than I otherwise
might.

I often use tables that link two or three other tables using referenced
serial types. And if I make a mistake using it where the wrong column
gets used I generally won't catch it until I notice that my query is
returning bogus information.

I thought that in addition to being used to simplify maintaining constraints,
that there should be some way to use them for catching mistakes.