Re: Schema variables - new implementation for Postgres 15
Pavel Stehule <pavel.stehule@gmail.com>
From: Pavel Stehule <pavel.stehule@gmail.com>
To: Julien Rouhaud <rjuju123@gmail.com>
Cc: Dean Rasheed <dean.a.rasheed@gmail.com>,
Joel Jacobson <joel@compiler.org>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2022-01-25T08:35:09Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Allow underscores in integer and numeric constants.
- faff8f8e47f1 16.0 cited
-
Remove special outfuncs/readfuncs handling of RangeVar.catalogname.
- 3cece34be842 16.0 cited
-
Remove extra space from dumped ALTER DEFAULT PRIVILEGES.
- 2af33369e794 16.0 cited
-
Create FKs properly when attaching table as partition
- b0284bfb1db5 16.0 cited
-
psql: improve tab-complete's handling of variant SQL names.
- 02b8048ba5dc 15.0 cited
út 25. 1. 2022 v 6:18 odesílatel Julien Rouhaud <rjuju123@gmail.com> napsal: > Hi, > > On Mon, Jan 24, 2022 at 12:33:11PM +0100, Pavel Stehule wrote: > > > > here is updated patch with locking support > > Thanks for updating the patch! > > While the locking is globally working as intended, I found a few problems > with > it. > > First, I don't think that acquiring the lock in > get_session_variable_type_typmod_collid() and > prepare_variable_for_reading() is > the correct approach. In transformColumnRef() and transformLetStmt() you > first > call IdentifyVariable() to check if the given name is a variable without > locking it and later try to lock the variable if you get a valid Oid. > This is > bug prone as any other backend could drop the variable between the two > calls > and you would end up with a cache lookup failure. I think the lock should > be > acquired during IdentifyVariable. It should probably be optional as one > codepath only needs the information to raise a warning when a variable is > shadowed, so a concurrent drop isn't a problem there. > There is a problem, because before the IdentifyVariable call I don't know if the variable will be shadowed or not. If I lock a variable inside IdentifyVariable, then I need to remember if I did lock there, or if the variable was locked already, and If the variable is shadowed and if lock is fresh, then I can unlock the variable. Regards Pavel