Re: How to get column, table or parameter name reporting when violating DOMAIN type constraint - Mailing list pgsql-novice

From Valerio Battaglia
Subject Re: How to get column, table or parameter name reporting when violating DOMAIN type constraint
Date
Msg-id CACxJNS=sXe14q3o1_VXpU+fkuKcc5r09xqVLva68kY30hvf9qw@mail.gmail.com
Whole thread Raw
In response to Re: How to get column, table or parameter name reporting when violating DOMAIN type constraint  (Tom Lane <tgl@sss.pgh.pa.us>)
List 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@sss.pgh.pa.us> wrote:
"David G. Johnston" <david.g.johnston@gmail.com> writes:
> On Sunday, March 26, 2023, Tom Lane <tgl@sss.pgh.pa.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

pgsql-novice by date:

Previous
From: Tom Lane
Date:
Subject: Re: How to get column, table or parameter name reporting when violating DOMAIN type constraint
Next
From: Roland Che
Date:
Subject: invalid memory alloc request size Error