I need to create, manage and drop schemas on the fly. If I go to create a schema that already exists, I want to (conditionally, via external means) drop and recreate it as specified. How can I check for the existence of said schema on my Postgres 9 server?
Currently, I'm doing this:
select exists (select * from pg_catalog.pg_namespace where nspname = 'schemaname');
but I feel like there's probably another way... is this the "proper" way to query Postgres for the existence of a particular schema?
From http://www.postgresql.org/docs/9.1/static/infoschema-schemata.html (emphasis my own):
So your original solution/query is more reliable than Peter's, albeit non-standard.
Use
If you check https://www.postgresql.org/docs/current/static/infoschema-schemata.html, you see
This means the query in accepted answer using
information_schema.schemata
doesn't show schemas that the current user isn't the owner of or doesn't have theUSAGE
privilege on.is more complete and will show all existing schemas that postgres didn't make itself regardless of whether or not you have access to the schema.
This one worked for me (Postgres 9.3):