Creating and Managing Schemas
Schemas logically organize objects and data in a database. Schemas allow you to have more than one object (such as tables) with the same name in the database without conflict if the objects are in different schemas.
The Default “Public” Schema
Every database has a default schema named public. If you do not create any schemas, objects are created in the public schema. All database roles (users) have CREATE and USAGE privileges in the public schema. When you create a schema, you grant privileges to your users to allow access to the schema.
Creating a Schema
Use the CREATE SCHEMA command to create a new schema. For example:
CREATE SCHEMA myschema;
Dropping a Schema
Use the DROP SCHEMAcommand to drop (delete) a schema. For example:
DROP SCHEMA myschema;
By default, the schema must be empty before you can drop it. To drop a schema and all of its objects (tables, data, functions, and so on) use:
DROP SCHEMA myschema CASCADE;
Schema Search Paths
To specify an object’s location in a database, use the schema-qualified name. For example:
=> SELECT * FROM myschema.mytable;
You can set the search_path configuration parameter to specify the order in which to search the available schemas for objects. The schema listed first in the search path becomes the default schema. If a schema is not specified, objects are created in the default schema.
Setting the Schema Search Path
The search_path configuration parameter sets the schema search order. The ALTER DATABASE command sets the search path. For example:
ALTER DATABASE mydatabase SET search_path TO myschema, public, pg_catalog;
You can also set search_path for a particular role (user) using the ALTER ROLE command. For example:
ALTER ROLE sally SET search_path TO myschema, public, pg_catalog;
Viewing the Current Schema
Use the current_schema() function to view the current schema. For example:
SELECT current_schema();
Use the SHOW command to view the current search path. For example:
SHOW search_path;
PostgreSQL default schemas
- information_schema
- pg_catalog
- pg_toast
- public
Information_schema consists of a standardized set of views that contain information about the objects in the database. These views get system information from the system catalog tables in a standardized way.
Pg_catalog contains the system catalog tables, built-in data types, functions, and operators. It is always part of the schema search path, even if it is not explicitly named in the search path.
Pg_toast stores large objects such as records that exceed the page size. This schema is used internally by the Greenplum Database system.
Every database has a default schema named public. If you do not create any schemas, objects are created in the public schema.