-----Original Message-----
From: Andreas Pflug [mailto:pgadmin@xxxxxxxxxxxxxxxxx]
Sent: 26 July 2004 17:28
To: Dave Page
Cc: Vitaly Belman; pgadmin-hackers@xxxxxxxxxxxxxx
Subject: Re: [pgadmin-support] Schemas causing problems :(
This is really hackers stuff.
Dave Page wrote:
I don't recall that discussion, but in general I think we should
completely ignore the search path. Consider a function:
foo.dostuff().
The current code will return an empty schema prefix for a
search_path
of public,bar,foo. What if there is also public.dostuff()
or bar.dostuff()?
CREATE OR REPLACE could really screw up in that case...
Some logic black holes... preliminarily public only.
Public only would work fine unless the user had an object in pg_catalog
(not advisable, but when did that stop some ppl)...
I also don't like the notion of treating public as some kind of
special schema. From PostgreSQL's pov, its only special in
that it's
there by default in template1 and the search_path. Other than that
it's just another schema and should be treated as such.
A grep showed that only FK has handles public special, all
other places go through pgDatabase::GetSchemaPrefix.
Yeah - I thought you were implying treating public/pg_catalog
differently when you said "It's obviously a mistake to suppress the
schema when creating/modifying objects (unless public or pg_catalog)"
The correct overall behaviour seems
- find the first schema in search_path that exists.
- If this is the schema in question, suppress it.
OK. Still might result in broken reverse engineered SQL when used in a
different session with a different search path of course.
- (ignore all following schema names, this was the main problem)
Yup.
- If schema = pg_catalog, suppress it.
Why? Any reverse engineered SQL will then incorrectly force objects into
the first existing schema in the search_path, not pg_catalog.