On Fri Feb 6, 2026 at 12:54 AM -03, Yugo Nagata wrote: >> >> Another possibility would be to get the actual values of "a" for example >> >> and show it on the error message, e.g: >> >> >> >> ERROR: new row for relation "t" violates check constraint "t_c_check" >> >> DETAIL: Failing row contains (5, 10, 5 * 2). >> > >> > That would indeed be more useful. One way to achieve this might be to >> > modify deparse_context and get_variable() so that a Var is displayed as its >> > actual value. >> > >> I'm not sure if I understand how modifying deparse_context_for() could >> help on this. >> >> What I did was to use the expression_tree_mutator API to mutate the >> virtual column expression to replace any Var reference with the value >> into the TupleTableSlot. Please see the attached v2 version. > > I initially thought about having deparse_context_for() directly output > actual values for Var references, but that does not seem like a good > approach. Replacing Vars with Consts beforehand using > expression_tree_mutator, as you did, looks like a better solution. > > One thing I noticed is that some expressions in virtual columns (e.g., > NULL and negative integers) differ from those in normal columns, for > example in the following (null vs. NULL): > > +DETAIL: Failing row contains (null, NULLIF(NULL::integer, 0)). > > However, this seems acceptable. > Yeah, after parsing we don't have the original string representation of the parse node, so at deparse_expression() it has it's own style to deparse nodes. I don't think that it's an issue and I also think that it's accepttable.
> Overall, this patch looks good to me. > Thank you for reviewing the patch! -- Matheus Alcantara EDB: https://www.enterprisedb.com
