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.

http://www.postgresql.org/docs/8.4/static/ddl-schemas.html

Organisation en cluster, base, schéma, table dans PostgreSQL

SyntaxeCréer un schéma

1
CREATE SCHEMA myschema;

SyntaxeCréer une table dans un schéma

1
CREATE TABLE myschema.mytable (
2
...
3
);

SyntaxeRequêter dans un schéma

1
SELECT ...
2
FROM myschema.mytable

Exemple

Schéma sous PostgreSQL

SyntaxeCatalogue : schémas

\dn : Liste des schémas de ma base de données

ComplémentSché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.

1
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 ma mytable dans le schéma mychema.

  • SELECT FROM mytable cherchera la table dans la schéma mychema, puis dans le schéma public si la table n'existe pas dans le premier schéma.

RemarqueSché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.

RemarqueCatalogue : \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