Re: possible proposal plpgsql GET DIAGNOSTICS oid = PG_ROUTINE_OID
Kirk Wolak <wolakk@gmail.com>
From: Kirk Wolak <wolakk@gmail.com>
To: Pavel Stehule <pavel.stehule@gmail.com>
Cc: Julien Rouhaud <rjuju123@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2023-03-27T03:36:10Z
Lists: pgsql-hackers
Attachments
- 0002-plpgsql-get-diagnostics-routine-oid.patch (text/plain) patch 0002
On Sun, Mar 26, 2023 at 5:37 PM Kirk Wolak <wolakk@gmail.com> wrote: > On Wed, Feb 8, 2023 at 10:56 AM Kirk Wolak <wolakk@gmail.com> wrote: > >> On Wed, Feb 8, 2023 at 3:08 AM Pavel Stehule <pavel.stehule@gmail.com> >> wrote: >> >>> hi >>> >>> st 8. 2. 2023 v 7:33 odesílatel Julien Rouhaud <rjuju123@gmail.com> >>> napsal: >>> >>>> On Tue, Feb 07, 2023 at 08:48:22PM +0100, Pavel Stehule wrote: >>>> > >>>> > GET DIAGNOSTICS _oid = PG_ROUTINE_OID; >>>> > RAISE NOTICE '... % ... %', _oid, _oid::regproc::text; >>>> > >>>> > Do you think it can be useful feature? >>>> >>>> +1, it would have been quite handy in a few of my projects. >>>> >>> >>> it can looks like that >>> >>> create or replace function foo(a int) >>> returns int as $$ >>> declare s text; n text; o oid; >>> begin >>> get diagnostics s = pg_current_routine_signature, >>> n = pg_current_routine_name, >>> o = pg_current_routine_oid; >>> raise notice 'sign:%, name:%, oid:%', s, n, o; >>> return a; >>> end; >>> $$ language plpgsql; >>> CREATE FUNCTION >>> (2023-02-08 09:04:03) postgres=# select foo(10); >>> NOTICE: sign:foo(integer), name:foo, oid:16392 >>> ┌─────┐ >>> │ foo │ >>> ╞═════╡ >>> │ 10 │ >>> └─────┘ >>> (1 row) >>> >>> The name - pg_routine_oid can be confusing, because there is not clean >>> if it is oid of currently executed routine or routine from top of exception >>> >>> Regards >>> >>> Pavel >>> >> >> I agree that the name changed to pg_current_routine_... makes the most >> sense, great call... >> >> +1 >> > > Okay, I reviewed this. I tested it (allocating too small of > varchar's for values, various "signature types"), > and also a performance test... Wow, on my VM, 10,000 Calls in a loop was > 2-4ms... > > The names are clear. Again, I tested with various options, and including > ROW_COUNT, or not. > > This functions PERFECTLY.... Except there are no documentation changes. > Because of that, I set it to Waiting on Author. > Which might be unfair, because I could take a stab at doing the > documentation (but docs are not compiling on my setup yet). > > The documentation changes are simple enough. > If I can get the docs compiled on my rig, I will see if I can make the > changes, and post an updated patch, > that contains both... > > But I don't want to be stepping on toes, or having it look like I am > taking credit. > > Regards - Kirk > Okay, I have modified the documentation and made sure it compiles. They were simple enough changes. I am attaching this updated patch. I have marked the item Ready for Commiter... Thanks for your patience. I now have a workable hacking environment! Regards - Kirk
Commits
-
Add a way to get the current function's OID in pl/pgsql.
- d3d53f955cf6 16.0 landed