Re: Re: proposal: schema variables
Pavel Stehule <pavel.stehule@gmail.com>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Move WAL sequence code into its own file
- a87987cafca6 19 (unreleased) cited
-
Add ExplainState argument to pg_plan_query() and planner().
- c83ac02ec730 19 (unreleased) cited
-
Don't include access/htup_details.h in executor/tuptable.h
- 1a8b5b11e48a 19 (unreleased) cited
-
Refactor to avoid code duplication in transformPLAssignStmt.
- b0fb2c6aa5a4 19 (unreleased) cited
-
Avoid including commands/dbcommands.h in so many places
- 325fc0ab14d1 19 (unreleased) cited
-
Restrict psql meta-commands in plain-text dumps.
- 71ea0d679543 19 (unreleased) cited
-
Split func.sgml into more manageable pieces
- 4e23c9ef65ac 19 (unreleased) cited
-
Fix squashing algorithm for query texts
- 0f65f3eec478 18.0 cited
-
EXPLAIN: Always use two fractional digits for row counts.
- 95dbd827f2ed 18.0 cited
-
Preliminary refactoring of plpgsql expression construction.
- a654af21ae52 18.0 cited
-
plpgsql: pure parser and reentrant scanner
- 7b27f5fd36cb 18.0 cited
-
Add some sanity checks in executor for query ID reporting
- 24f520594809 18.0 cited
-
Fix misleading error message context
- 4af123ad45bd 18.0 cited
-
Add macros for looping through a List without a ListCell.
- 14dd0f27d7cd 17.0 cited
Attachments
- v20250103-0022-pg_restore-A-variable.patch (text/x-patch) patch v20250103-0022
- v20250103-0020-this-patch-changes-error-message-column-doesn-t-exis.patch (text/x-patch) patch v20250103-0020
- v20250103-0019-expression-with-session-variables-can-be-inlined.patch (text/x-patch) patch v20250103-0019
- v20250103-0021-transactional-variables.patch (text/x-patch) patch v20250103-0021
- v20250103-0018-plpgsql-implementation-for-LET-statement.patch (text/x-patch) patch v20250103-0018
- v20250103-0017-allow-parallel-execution-queries-with-session-variab.patch (text/x-patch) patch v20250103-0017
- v20250103-0016-allow-read-an-value-of-session-variable-directly-fro.patch (text/x-patch) patch v20250103-0016
- v20250103-0015-Implementation-of-NOT-NULL-and-IMMUTABLE-clauses.patch (text/x-patch) patch v20250103-0015
- v20250103-0014-Implementation-of-DEFAULT-clause-default-expressions.patch (text/x-patch) patch v20250103-0014
- v20250103-0013-Implementation-ON-TRANSACTION-END-RESET-clause.patch (text/x-patch) patch v20250103-0013
- v20250103-0012-implementation-of-temporary-session-variables.patch (text/x-patch) patch v20250103-0012
- v20250103-0011-PREPARE-LET-support.patch (text/x-patch) patch v20250103-0011
- v20250103-0010-EXPLAIN-LET-support.patch (text/x-patch) patch v20250103-0010
- v20250103-0009-dynamic-check-of-usage-of-session-variable-fences.patch (text/x-patch) patch v20250103-0009
- v20250103-0008-variable-fence-syntax-support-and-variable-fence-usa.patch (text/x-patch) patch v20250103-0008
- v20250103-0007-GUC-session_variables_ambiguity_warning.patch (text/x-patch) patch v20250103-0007
- v20250103-0006-plpgsql-tests.patch (text/x-patch) patch v20250103-0006
- v20250103-0005-memory-cleaning-after-DROP-VARIABLE.patch (text/x-patch) patch v20250103-0005
- v20250103-0004-DISCARD-VARIABLES.patch (text/x-patch) patch v20250103-0004
- v20250103-0003-function-pg_session_variables-for-cleaning-tests.patch (text/x-patch) patch v20250103-0003
- v20250103-0002-Storage-for-session-variables-and-SQL-interface.patch (text/x-patch) patch v20250103-0002
- v20250103-0001-Enhancing-catalog-for-support-session-variables-and-.patch (text/x-patch) patch v20250103-0001
Hi
pá 3. 1. 2025 v 8:18 odesílatel jian he <jian.universality@gmail.com>
napsal:
> hi.
>
> in the function svariableStartupReceiver all these "ereport(ERROR"
> cannot happen,
> since transformLetStmt already did all the heavy work.
> base on
> https://www.postgresql.org/docs/current/error-message-reporting.html
> all these "ereport(ERROR," in the svariableStartupReceiver can be
> simplified as "elog(ERROR,"
> or Assert.
>
>
> After standard_ExecutorStart->InitPlan, queryDesc.tupDesc will not
> include attr->attisdropped is true scarenio.
> In standard_ExecutorStart, I added the following code then ran the
> regress test again to prove my point.
>
> standard_ExecutorStart
> /*
> * Initialize the plan state tree
> */
> InitPlan(queryDesc, eflags);
> for (int i = 0; i < queryDesc->tupDesc->natts; i++)
> {
> Form_pg_attribute attr = TupleDescAttr(queryDesc->tupDesc, i);
> if (attr->attisdropped)
> {
> elog(INFO, "some attribute is dropped queryDesc->operation
> is %d", queryDesc->operation);
> }
> }
> MemoryContextSwitchTo(oldcontext);
> -------------------------
> svariableStartupReceiver parameter typeinfo is from queryDesc->tupDesc
> So I think svariableStartupReceiver, typeinfo->natts will always equal one.
> therefore SVariableState.slot_offset is not necessary.
>
It is true. The syntax allows just `expression` or `(subquery)`, and all
dirty work does execution of subquery
>
> overall, i think svariableStartupReceiver can be simplified as the
> following:
>
> static void
> svariableStartupReceiver(DestReceiver *self, int operation, TupleDesc
> typeinfo)
> {
> SVariableState *myState = (SVariableState *) self;
> int natts = typeinfo->natts;
> Form_pg_attribute attr;
> LOCKTAG locktag PG_USED_FOR_ASSERTS_ONLY;
> Assert(myState->pub.mydest == DestVariable);
> Assert(OidIsValid(myState->varid));
> Assert(SearchSysCacheExists1(VARIABLEOID, myState->varid));
> #ifdef USE_ASSERT_CHECKING
> SET_LOCKTAG_OBJECT(locktag,
> MyDatabaseId,
> VariableRelationId,
> myState->varid,
> 0);
> Assert(LockHeldByMe(&locktag, AccessShareLock, false));
> #endif
> Assert(natts == 1);
> attr = TupleDescAttr(typeinfo, 0);
> myState->need_detoast = attr->attlen == -1;
> myState->rows = 0;
> }
>
done + regress tests
>
> I've attached the file containing the changes I mentioned earlier.
>
> -------------------------<<>>>-------------------------------
> Overall, 0001 and 0002 the doc looks good to me now.
> The following are only some minor issues I came up with.
>
> In Table 5.1. ACL Privilege Abbreviations
> <table id="privilege-abbrevs-table">
> <title><acronym>ACL</acronym> Privilege Abbreviations</title>
>
> <literal>VARIABLE</literal> (occurred 3 times)
> should be
> <literal>SESSION VARIABLE</literal>
> ?
>
changed
>
> doc/src/sgml/glossary.sgml
> I want to do minor tweak. from
> <para>
> A persistent database object that holds a value in session memory.
> This
> value is private to each session and is released when the session
> ends.
> Read or write access to session variables is controlled by privileges,
> similar to other database objects.
> </para>
> to
> <para>
> A persistent database object that holds a value in session memory.
> This
> value is private to each session and is reset to default value
> (null) when the session ends.
> Read or write access to session variables is controlled by access
> privileges,
> similar to other database objects.
> </para>
>
I think the sentence "and is reset to default value (null) when the
session ends" is a little bit misguided. The memory is
really released. I changed it to
A persistent database object that holds a value in session memory.
This
value is private to each session and is released when the session ends.
The default value of the session variable is null. Read or write
access
to session variables is controlled by privileges, similar to other
database
objects.
> in let.sgml.
> <para>
> Example:
> <programlisting>
> CREATE VARIABLE myvar AS integer;
> LET myvar = 10;
> LET myvar = (SELECT sum(val) FROM tab);
> </programlisting>
> </para>
>
> it should be
> <refsect1>
> <title>Examples</title>
> ...your example code
> </refsect1>
>
done
Regards
Pavel