Re: proposal: schema variables

From: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
To: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>
Cc: Erik Rijkers <er(at)xs4all(dot)nl>, Michael Paquier <michael(at)paquier(dot)xyz>, Zhihong Yu <zyu(at)yugabyte(dot)com>, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, DUVAL REMI <REMI(dot)DUVAL(at)cheops(dot)fr>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: proposal: schema variables
Date: 2024-07-24 18:01:01
Message-ID: CAFj8pRDgraz64HHcCoFGCKDM1Cxv1ukELsqfsxux4JP3PM6RyQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

st 24. 7. 2024 v 19:02 odesílatel Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>
napsal:

> On Wed, 2024-07-24 at 17:19 +0200, Pavel Stehule wrote:
> > > This is buggy:
> > >
> > > CREATE VARIABLE str AS text NOT NULL DEFAULT NULL;
> > >
> > > Ugh.
> > >
> > > SELECT str;
> > > ERROR: null value is not allowed for NOT NULL session variable
> "laurenz.str"
> > > DETAIL: The result of DEFAULT expression is NULL.
> > >
> > > Perhaps that is a leftover from the previous coding, but I think
> there need be
> > > no check upon SELECT. It should be enough to check during CREATE
> VARIABLE and
> > > LET.
> >
> > I think it is correct. When you use SELECT str, then DEFAULT expression
> is
> > executed, and then the result is assigned to a variable, and there is
> NOT NULL
> > guard, which raises an exception. The variable is not initialized when
> you run
> > DDL, but it is initialized when you first read or write from/to the
> variable.
> > The DEFAULT expression is not evaluated in DDL time. In this case, I can
> detect
> > the problem in DDL time because the result is transformed to NULL node,
> but
> > generally there can be SQL non immutable function, and then I need to
> wait until
> > the DEFAULT expression will be evaluated - and it is time of first
> reading.
> > Unfortunately, there is not an available check if some expression is
> NULL,
> > that I can use in DDL time, but I have it in plpgsql_check.
>
> That makes sense to me.
>
> In that case, I think we can drop the requirement that NOT NULL variables
> need a default clause.
>

removed

>
> >
> > > I can see the usefulness of IMMUTABLE variables, but I am surprised
> that
> > > they are reset by DISCARD. What is the use case you have in mind?
> > > The use case I can envision is an application that sets a value
> right after
> > > authentication, for use with row-level security. But then it would
> be harmful
> > > if the user could reset the variable with DISCARD.
> >
> > Primary I think about IMMUTABLE variables like about some form of cache.
> > This cache is protected against unwanted repeated write - and can help
> with
> > detection of this situation.
>
> We can leave it as it is. The IMMUTABLE feature need not go into the first
> release, so that can be discussed some more later.
>
> Thanks for the new patch set; I'll look at it soon.
>

Thank you very much

Regards

Pavel

>
> Yours,
> Laurenz Albe
>

Attachment Content-Type Size
v20240724-2-0003-function-pg_session_variables-for-cleaning-tests.patch text/x-patch 4.6 KB
v20240724-2-0001-Enhancing-catalog-for-support-session-variables-and-.patch text/x-patch 132.0 KB
v20240724-2-0005-memory-cleaning-after-DROP-VARIABLE.patch text/x-patch 22.5 KB
v20240724-2-0004-DISCARD-VARIABLES.patch text/x-patch 9.6 KB
v20240724-2-0002-Storage-for-session-variables-and-SQL-interface.patch text/x-patch 147.7 KB
v20240724-2-0008-EXPLAIN-LET-support.patch text/x-patch 8.3 KB
v20240724-2-0006-plpgsql-tests.patch text/x-patch 16.9 KB
v20240724-2-0007-GUC-session_variables_ambiguity_warning.patch text/x-patch 14.3 KB
v20240724-2-0009-PREPARE-LET-support.patch text/x-patch 7.4 KB
v20240724-2-0011-Implementation-ON-TRANSACTION-END-RESET-clause.patch text/x-patch 14.5 KB
v20240724-2-0012-Implementation-of-DEFAULT-clause-default-expressions.patch text/x-patch 33.4 KB
v20240724-2-0013-Implementation-of-NOT-NULL-and-IMMUTABLE-clauses.patch text/x-patch 36.2 KB
v20240724-2-0010-implementation-of-temporary-session-variables.patch text/x-patch 38.7 KB
v20240724-2-0014-allow-read-an-value-of-session-variable-directly-fro.patch text/x-patch 12.0 KB
v20240724-2-0015-allow-parallel-execution-queries-with-session-variab.patch text/x-patch 11.3 KB
v20240724-2-0017-expression-with-session-variables-can-be-inlined.patch text/x-patch 4.2 KB
v20240724-2-0016-plpgsql-implementation-for-LET-statement.patch text/x-patch 13.6 KB
v20240724-2-0018-this-patch-changes-error-message-column-doesn-t-exis.patch text/x-patch 29.1 KB
v20240724-2-0019-transactional-variables.patch text/x-patch 39.0 KB
v20240724-2-0020-pg_restore-A-variable.patch text/x-patch 2.8 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2024-07-24 18:09:49 Re: warning: dereferencing type-punned pointer
Previous Message Peter Eisentraut 2024-07-24 17:53:47 Re: warning: dereferencing type-punned pointer