Re: proposal: schema variables

Pavel Stehule <pavel.stehule@gmail.com>

From: Pavel Stehule <pavel.stehule@gmail.com>
To: Laurenz Albe <laurenz.albe@cybertec.at>
Cc: Erik Rijkers <er@xs4all.nl>, Michael Paquier <michael@paquier.xyz>, Zhihong Yu <zyu@yugabyte.com>, Amit Kapila <amit.kapila16@gmail.com>, DUVAL REMI <REMI.DUVAL@cheops.fr>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2024-07-24T18:01:01Z
Lists: pgsql-hackers, pgsql-performance

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Move WAL sequence code into its own file

  2. Add ExplainState argument to pg_plan_query() and planner().

  3. Don't include access/htup_details.h in executor/tuptable.h

  4. Refactor to avoid code duplication in transformPLAssignStmt.

  5. Avoid including commands/dbcommands.h in so many places

  6. Restrict psql meta-commands in plain-text dumps.

  7. Split func.sgml into more manageable pieces

  8. Fix squashing algorithm for query texts

  9. EXPLAIN: Always use two fractional digits for row counts.

  10. Preliminary refactoring of plpgsql expression construction.

  11. plpgsql: pure parser and reentrant scanner

  12. Add some sanity checks in executor for query ID reporting

  13. Fix misleading error message context

  14. Add macros for looping through a List without a ListCell.

Attachments

st 24. 7. 2024 v 19:02 odesílatel Laurenz Albe <laurenz.albe@cybertec.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
>