Re: proposal: schema variables

From: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
To: Jim Jones <jim(dot)jones(at)uni-muenster(dot)de>
Cc: Bruce Momjian <bruce(at)momjian(dot)us>, Dmitry Dolgov <9erthalion6(at)gmail(dot)com>, Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>, Erik Rijkers <er(at)xs4all(dot)nl>, Michael Paquier <michael(at)paquier(dot)xyz>, 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>, jian he <jian(dot)universality(at)gmail(dot)com>, Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>, PegoraroF10 <marcos(at)f10(dot)com(dot)br>
Subject: Re: proposal: schema variables
Date: 2025-12-05 06:50:25
Message-ID: CAFj8pRAfQt13pacZgL_tQw8amczvLYEVDqKgjUNHDcQkwJT2_g@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers pgsql-performance

Hi

st 3. 12. 2025 v 14:44 odesílatel Jim Jones <jim(dot)jones(at)uni-muenster(dot)de>
napsal:

> Hi Pavel
>
> On 03/12/2025 05:27, Pavel Stehule wrote:
> > Hi
> >
> > fresh rebase after a87987cafca683e9076c424f99bae117211a83a4
>
>
> I'm going through the patch again and have a few initial comments.
>

>
> == Memory Management ==
>
> DROP VARIABLE seems to be leaking memory:
>
> postgres=# CREATE TEMPORARY VARIABLE var AS text;
> CREATE VARIABLE
> postgres=# LET var = repeat('🐘', 100000000);
> LET
> postgres=# SELECT pg_size_pretty(used_bytes)
> FROM pg_backend_memory_contexts
> WHERE name = 'session variables';
> pg_size_pretty
> ----------------
> 381 MB
> (1 row)
>
> postgres=# DROP VARIABLE var;
> DROP VARIABLE
> postgres=# SELECT pg_size_pretty(used_bytes)
> FROM pg_backend_memory_contexts
> WHERE name = 'session variables';
> pg_size_pretty
> ----------------
> 381 MB
> (1 row)
>
>
> If we simply set the variable to NULL it works as expected:
>
>
> postgres=# LET var = repeat('🐘', 100000000);
> LET
> postgres=# SELECT pg_size_pretty(used_bytes)
> FROM pg_backend_memory_contexts
> WHERE name = 'session variables';
> pg_size_pretty
> ----------------
> 381 MB
> (1 row)
>
> postgres=# LET var = NULL;
> LET
> postgres=# SELECT pg_size_pretty(used_bytes)
> FROM pg_backend_memory_contexts
> WHERE name = 'session variables';
> pg_size_pretty
> ----------------
> 240 bytes
> (1 row)
>
> Most likely you forgot to pfree "svar->value" at DropVariableByName(), e.g.
>
> void
> DropVariableByName(char *varname)
> {
>
> ...
>
> if (!svar->typbyval && !svar->isnull)
> pfree(DatumGetPointer(svar->value));
>
> (void) hash_search(sessionvars,
> varname,
> HASH_REMOVE,
> NULL);
>
> }
>
>
yes, there was a bug, fixed

>
> == TAB completion ==
>
> Why suggest CREATE VARIABLE (non-temporary) if it is not supported?
>
> postgres=# CREATE V<TAB>
> VARIABLE VIEW
> postgres=# CREATE VARIABLE var AS int;
> ERROR: only temporal session variables are supported
>
> It would be nice to have tab completion for DROP VARIABLE and LET as well:
>
> postgres=# DROP VARIABLE <TAB>
>
> postgres=# LET <TAB>
>
>
>
> == Missing IF EXISTS in DROP VARIABLE ==
>
> DROP VARIABLE IF EXISTS var;
> ERROR: syntax error at or near "EXISTS"
> LINE 1: DROP VARIABLE IF EXISTS var;
>
> ^
>

Both mentioned issues are related to the declared target of this patchset -
maximal reduction of the size.

But It not difficult to support these requested features - see the patches
0008 and 0009

Best regards

Pavel

>
>
> Best, Jim
>
>
>
>

Attachment Content-Type Size
v20251205-0007-DISCARD-TEMP.patch text/x-patch 4.3 KB
v20251205-0008-support-CREATE-IF-NOT-EXISTS-and-DROP-IF-EXISTS.patch text/x-patch 11.0 KB
v20251205-0009-use-names-of-currently-used-temp-variables-for-tab-c.patch text/x-patch 6.2 KB
v20251205-0005-svariableReceiver.patch text/x-patch 10.8 KB
v20251205-0006-LET-command-assign-a-result-of-expression-to-the-ses.patch text/x-patch 39.4 KB
v20251205-0003-collect-session-variables-used-in-plan-and-assign-pa.patch text/x-patch 15.8 KB
v20251205-0002-parsing-session-variable-fences.patch text/x-patch 18.6 KB
v20251205-0004-fill-an-auxiliary-buffer-with-values-of-session-vari.patch text/x-patch 14.4 KB
v20251205-0001-CREATE-VARIABLE-DROP-VARIABLE.patch text/x-patch 33.0 KB

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Masahiko Sawada 2025-12-05 07:13:37 Re: POC: enable logical decoding when wal_level = 'replica' without a server restart
Previous Message shveta malik 2025-12-05 06:44:55 Re: POC: enable logical decoding when wal_level = 'replica' without a server restart

Browse pgsql-performance by date

  From Date Subject
Next Message Jan Claeys 2025-12-05 09:08:53 Re: Client-server communication for FETCH
Previous Message Vincent Veyron 2025-12-04 22:56:18 Re: Why is my query 3 times faster on my workstation than on my server?