instead of yet another GUC, but if that's not an option, I'm happy with a GUC as well.
IMO, the current search_path default behaviour is a minefield.
For users like myself, who prefer a safer context-free name resolution behaviour, here is how I think it should work:
* The only schemas that don't require fully-qualified schemas are 'pg_catalog' and 'public'
* The $user schema feature is removed, i.e:
- $user is not part of the search_path
- objects are not created nor looked for in a $user schema if such a schema exists
- objects are always created in 'public' if a schema is not explicitly specified
* Temp objects always needs to be fully-qualified using 'pg_temp'
* 'pg_catalog' and 'public' are enforced to be completely disjoint.
That is, trying to create an object in 'public' that is in conflict with 'pg_catalog' would raise an error.
More ideas?