Notion de schéma
Définition :
A PostgreSQL database cluster contains one or more named databases. Users and groups of users are shared across the entire cluster, but no other data is shared across databases. Any given client connection to the server can access only the data in a single database, the one specified in the connection request.
A database contains one or more named schemas, which in turn contain tables. Schemas also contain other kinds of named objects, including data types, functions, and operators. The same object name can be used in different schemas without conflict; for example, both schema1 and myschema can contain tables named mytable. Unlike databases, schemas are not rigidly separated: a user can access objects in any of the schemas in the database he is connected to, if he has privileges to do so.
Syntaxe : Créer un schéma
CREATE SCHEMA myschema;
Syntaxe : Créer une table dans un schéma
CREATE TABLE myschema.mytable (
...
);
Syntaxe : Requêter dans un schéma
SELECT ...
FROM myschema.mytable
Exemple :
Syntaxe : Catalogue : schémas
\dn
: Liste des schémas de ma base de données
Complément : Schéma par défaut : search_path
Afin d'alléger la syntaxe il est possible de définir un schéma par défaut, dans lequel seront créer les tables non-préfixées et un ou plusieurs schémas par défaut dans lesquels seront requêtées les tables non-préfixées.
SET search_path TO myschema,public;
Cette instruction définit le schéma myschema
comme schéma par défaut pour la création de table et le requêtage, puis public
pour le requêtage, le premier étant prioritaire sur le second :
CREATE mytable
créera mamytable
dans le schémamychema
.SELECT FROM mytable
cherchera la table dans la schémamychema
, puis dans le schémapublic
si la table n'existe pas dans le premier schéma.
Remarque : Schéma "public"
Le schéma public
est un schéma créé par défaut à l'initialisation de la base, et qui sert de schéma par défaut en l'absence de toute autre spécification.
Remarque : Catalogue : \d
La liste des tables retournée par \d
dépend du search_path. Pour que \d
retourne les tables de schema1
, il faut donc exécuter l'instruction :
SET search_path TO public, schema1