Re: How to get column, table or parameter name reporting when violating DOMAIN type constraint

From: Valerio Battaglia <vabatta(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>, "pgsql-novice(at)lists(dot)postgresql(dot)org" <pgsql-novice(at)lists(dot)postgresql(dot)org>
Subject: Re: How to get column, table or parameter name reporting when violating DOMAIN type constraint
Date: 2023-03-27 00:37:59
Message-ID: CACxJNS=sXe14q3o1_VXpU+fkuKcc5r09xqVLva68kY30hvf9qw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-novice

Thanks for the answer and explanation. My reasoning behind the use of
domains, particularly in function calls, is to have a useful approach for
validating input before it enters a function. By doing so, it eliminates
the need to manually verify input for public / exposed functions, and would
effectively make domains provide an efficient way to encapsulate and
enforce business rules.

Considering the aforementioned example, having a message reporting with the
position name would make the consumer life much easier, program or human
alike

SELECT my_function(100, -100);
-- ERROR: value "second_parameter" for domain my_domain violates check
constraint "value_min"

SELECT (-1)::my_domain;
-- ERROR: value "unnamed" for domain my_domain violates check
constraint "value_min"

Valerio

On Sun, 26 Mar 2023 at 18:00, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:

> "David G. Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com> writes:
> > On Sunday, March 26, 2023, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> >> More to the point, you have the wrong mental model: a domain constraint
> >> violation might not be associated with a table column at all.
>
> > I disagree that the mental model is wrong.
>
> The OP is asking for action-at-a-distance. There are probably cases
> where the distance is short enough that we could associate the runtime
> error with a particular insertion target column, but I don't think it
> could possibly be made to work for every sort of insert/select query.
> In any case, the possibility of a hypothetical future feature (which
> nobody is actively working on AFAIK) doesn't seem like a very useful
> answer here.
>
> > There are existing threads that I may hunt later. IIRC, you (Tom) even
> > suggested a possible way forward on this last time it came up.
>
> I recall proposing that we try to produce syntax-error-like error
> cursors for runtime errors, but it's not apparent to me that that'd
> be tremendously applicable to the OP's problem. The output would
> look something like
>
> ERROR: value for domain my_domain violates check constraint "value_min"
> LINE 1: SELECT my_function(100, -100);
> ^
>
> which might be helpful for a human, but probably not very much so
> for a program. (BTW, this illustrates another issue: I'm pretty
> sure that in the given case, the error is thrown while evaluating
> my_function's arguments, long before we get within hailing distance
> of any INSERT at all.)
>
> regards, tom lane
>

In response to

Browse pgsql-novice by date

  From Date Subject
Next Message Roland Che 2023-04-05 09:31:37 invalid memory alloc request size Error
Previous Message Tom Lane 2023-03-26 16:00:05 Re: How to get column, table or parameter name reporting when violating DOMAIN type constraint