ne 30. 5. 2021 v 8:52 odesílatel Joel Jacobson <j...@compiler.org> napsal:

> On Sat, May 29, 2021, at 22:10, Marko Tiikkaja wrote:
>
> On Sat, May 29, 2021 at 11:06 PM Joel Jacobson <j...@compiler.org> wrote:
>
>
> Glad you bring this problem up for discussion, something should be done to
> improve the situation.
>
> Personally, as I really dislike search_path and consider using it an
> anti-pattern.
> I would rather prefer a GUC to hard-code search_path to a constant default
> value of just ‘public’ that cannot be changed by anyone or any function.
> Trying to change it to a different value would raise an exception.
>
>
> That would work, too!  I think it's a nice idea, perhaps even better than
> what I proposed.  I would be happy to see either one incorporated.
>
>
> Another idea would be to create an extension that removes the search_path
> feature entirely,
> not sure though if the current hooks would allow creating such an
> extension.
>
> Maybe "extensions" that only removes unwanted core features could be by
> convention be prefixed with "no_"?
>
> CREATE EXTENSION no_search_path;
>
> That way, a company with a company-wide policy against using search_path,
> could add this to all their company .control extension files:
>

Maybe inverted design can work better - there can be GUC -
"qualified_names_required" with a list of schemas without enabled implicit
access.

The one possible value can be "all".

The advantage of this design can be the possibility of work on current
extensions.

I don't think so search_path can be disabled - but there can be checks that
disallow non-qualified names.

Pavel



> requires = 'no_search_path'
>
> If some employee would try to `DROP EXTENSION no_search_path` they would
> get an error:
>
> # DROP EXTENSION no_search_path;
> ERROR:  cannot drop extension no_search_path because other objects depend
> on it
> DETAIL:  extension acme_inc depends on extension no_search_path
>
> This would be especially useful when a company has a policy to use some
> extension,
> instead of relying on the built-in functionality provided.
> I'm not using "zson" myself, but perhaps it could be a good example to
> illustrate my point:
>
> Let's say a company has decided to use zson instead of json/jsonb,
> the company would then ensure nothing is using json/jsonb
> via the top-level .control file for the company's own extension:
>
> requires = 'no_json, no_jsonb, zson'
>
> Or if not shipping the company's product as an extension,
> they could instead add this to the company's install script:
>
> CREATE EXTENSION no_json;
> CREATE EXTENSION no_jsonb;
> CREATE EXTENSION zson;
>
> Maybe this is out of scope for extensions, since I guess extensions are
> supposed to add features?
>
> If so, how about a new separate command `CREATE REDUCTION` specifically to
> remove unwanted core features,
> which then wouldn't need the "no_" prefix since it would be implicit and
> in a different namespace:
>
> E.g.
>
> CREATE REDUCTION search_path;
>
> and
>
> CREATE REDUCTION json;
> CREATE REDUCTION jsonb;
> CREATE EXTENSION zson;
>
> /Joel
>

Reply via email to