| 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 |
| 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 |
| 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? |