Re: CREATE FUNCTION ... SEARCH { DEFAULT | SYSTEM | SESSION }
Jeff Davis <pgsql@j-davis.com>
From: Jeff Davis <pgsql@j-davis.com>
To: Joe Conway <mail@joeconway.com>, pgsql-hackers@postgresql.org
Date: 2023-08-12T16:07:47Z
Lists: pgsql-hackers
On Sat, 2023-08-12 at 09:15 -0400, Joe Conway wrote: > It isn't clear to me what is the precise difference between DEFAULT > and > SESSION The the current patch, SESSION always gets the search path from the session, while DEFAULT is controlled by the GUC safe_function_search_path. If the GUC is false (the default) then DEFAULT and SESSION are the same. If the GUC is true, then DEFAULT and SYSTEM are the same. There are alternatives to using a GUC to differentiate them. The main point of this patch is to capture what the user intends in a convenient and forward-compatible way. If the user specifies nothing at all, they get DEFAULT, and we could treat that specially in various ways to move toward safety while minimizing breakage. > > Personally I think having pg_temp in the SYSTEM search path makes > sense > for temp tables The patch doesn't change this behavior -- SYSTEM (without any other SET) gives you "pg_catalog, pg_temp" and there's no way to exclude pg_temp entirely. My point was that by capturing the user's intent with SEARCH SYSTEM, it gives us a bit more freedom to have these kinds of discussions later. And it's certainly easier for the user to specify SEARCH SYSTEM than "SET search_path = pg_catalog, pg_temp". Regards, Jeff Davis
Commits
-
Cache opaque handle for GUC option to avoid repeasted lookups.
- 867dd2dc8704 17.0 landed
-
Add cache for recomputeNamespacePath().
- f26c2368dcae 17.0 cited