Amazon Redshift
Manuel du développeur de base de données

Schémas

Une base de données contient un ou plusieurs schémas désignés. Chaque schéma dans une base de données contient des tables et d'autres types d'objets nommés. Par défaut, une base de données se compose d'un schéma unique, qui est appelé PUBLIC. Vous pouvez utiliser des schémas pour regrouper des objets de base de données sous un nom commun. Les schémas sont similaires aux répertoires de système de fichiers, sauf qu'ils ne peuvent pas s'imbriquer.

Des noms d'objet de base de données identiques peuvent être utilisés dans des schémas distincts de la même base de données sans que cela entraîne de conflits. Par exemple, MY_SCHEMA et YOUR_SCHEMA peuvent contenir une table nommée MYTABLE. Les utilisateurs disposant des privilèges nécessaires peuvent accéder aux objets sur plusieurs schémas dans une base de données.

Par défaut, un objet est créé dans le premier schéma du chemin d'accès de la base de données. Pour plus d'informations, consultez Chemin de recherche plus loin dans cette section.

Les schémas permettent de résoudre les problèmes d'organisation et de simultanéité dans un environnement multi-utilisateur comme suit :

  • Pour autoriser de nombreux développeurs à utiliser la même base de données sans interférer les uns avec les autres.

  • Pour organiser les objets de base de données en groupes logiques afin de les rendre plus faciles à gérer.

  • Pour fournir à des applications la possibilité de placer leurs objets dans des schémas distincts, afin que leurs noms ne soient pas incompatibles avec les noms des objets utilisés par d'autres applications.

Création, modification et suppression de schémas

N'importe quel utilisateur peut créer des schémas et modifier ou supprimer ceux qu'il possède.

Vous pouvez effectuer les opérations suivantes :

  • Pour créer un schéma, utilisez la commande CREATE SCHEMA.

  • Pour modifier le propriétaire d'un schéma, utilisez la commande ALTER SCHEMA.

  • Pour supprimer un schéma et ses objets, utilisez la commande DROP SCHEMA.

  • Pour créer une table dans un schéma, créez-la au format schema_name.table_name.

Pour afficher une liste de tous les schémas, interrogez la table catalogue système PG_NAMESPACE :

select * from pg_namespace;

Pour afficher la liste des tables qui font partie d'un schéma, interrogez la table catalogue système PG_TABLE_DEF. Par exemple, la requête suivante renvoie une liste de tables dans le schéma PG_CATALOG.

select distinct(tablename) from pg_table_def where schemaname = 'pg_catalog';

Chemin de recherche

Le chemin de recherche est défini dans le paramètre search_path avec une liste séparée par des virgules de noms de schémas. Le chemin d'accès spécifie l'ordre dans lequel les schémas sont recherchés lorsqu'un objet, comme une table ou une fonction, est référencé par un nom simple qui n'inclut pas de qualificateur de schéma.

Si un objet est créé sans spécifier de schéma cible, l'objet est ajouté au premier schéma qui est répertorié dans le chemin de recherche. Lorsqu'il existe des objets avec des noms identiques dans des schémas distincts, un nom d'objet qui ne spécifie pas de schéma fera référence au premier schéma du chemin d'accès qui contient un objet portant ce nom.

Pour modifier le schéma par défaut de la session en cours, utilisez la commande SET.

Pour plus d'informations, consultez la description de search_path dans la Référence de configuration.

Privilèges basés sur un schéma

Les privilèges basés sur un schéma sont déterminés par le propriétaire du schéma :

  • Par défaut, tous les utilisateurs disposent des privilèges CREATE et USAGE sur le schéma PUBLIC d'une base de données. Pour interdire aux utilisateurs de créer des objets dans le schéma PUBLIC d'une base de données, utilisez la commande REVOKE pour supprimer ce privilège.

  • Les utilisateurs ne peuvent accéder à aucun objet des schémas qui ne leur appartiennent pas, sauf s'ils bénéficient du privilège USAGE, accordé par le propriétaire de l'objet.

  • Si les utilisateurs bénéficient du privilège CREATE concernant un schéma créé par un autre utilisateur, ils peuvent créer des objets dans ce schéma.