Postgresql 中文操作指南

CREATE SCHEMA

CREATE SCHEMA — définition d’un nouveau schéma

Synopsis

CREATE SCHEMA schema_name [ AUTHORIZATION role_specification ] [ schema_element [ ... ] ]
CREATE SCHEMA AUTHORIZATION role_specification [ schema_element [ ... ] ]
CREATE SCHEMA IF NOT EXISTS schema_name [ AUTHORIZATION role_specification ]
CREATE SCHEMA IF NOT EXISTS AUTHORIZATION role_specification

where role_specification can be:

    user_name
  | CURRENT_ROLE
  | CURRENT_USER
  | SESSION_USER

Description

CREATE SCHEMA insère un nouveau schéma dans la base de données actuelle. Le nom du schéma doit être distinct de celui de tout schéma existant dans la base de données actuelle.

Un schéma est essentiellement un espace de noms : il contient des objets nommés (tables, types de données, fonctions et opérateurs) dont les noms peuvent être identiques à ceux d’autres objets existant dans d’autres schémas. les objets nommés sont accessibles soit en « qualifiant » leurs noms avec le nom du schéma comme préfixe, soit en définissant un chemin de recherche qui inclut le ou les schémas souhaités. Une commande CREATE spécifiant un nom d’objet non qualifié crée l’objet dans le schéma actuel (celui qui se trouve au début du chemin de recherche, qui peut être déterminé avec la fonction current_schema ).

En option, CREATE SCHEMA peut inclure des sous-commandes pour créer des objets dans le nouveau schéma. Les sous-commandes sont traitées essentiellement de la même manière que des commandes distinctes émises après la création du schéma, sauf que si la clause AUTHORIZATION est utilisée, tous les objets créés seront détenus par cet utilisateur.

Parameters

  • schema_name

    • Le nom d’un schéma à créer. Si cela est omis, user_name est utilisé comme nom de schéma. Le nom ne peut pas commencer par pg_ , car ces noms sont réservés aux schémas système.

  • user_name

    • Le nom de rôle de l’utilisateur qui sera propriétaire du nouveau schéma. Si omis, la valeur par défaut est l’utilisateur exécutant la commande. Pour créer un schéma appartenant à un autre rôle, vous devez pouvoir vous connecter à ce rôle.

  • schema_element

    • Une instruction SQL définissant un objet à créer dans le schéma. Actuellement, seuls CREATE TABLE , CREATE VIEW , CREATE INDEX , CREATE SEQUENCE , CREATE TRIGGER et GRANT sont acceptés comme clauses dans CREATE SCHEMA . D’autres types d’objets peuvent être créés dans des commandes distinctes après la création du schéma.

  • IF NOT EXISTS

    • Ne rien faire (sauf émettre une notification) si un schéma portant le même nom existe déjà. Les sous-commandes schema_element ne peuvent pas être incluses lorsque cette option est utilisée.

Notes

Pour créer un schéma, l’utilisateur appelant doit disposer du privilège CREATE pour la base de données actuelle. (bien sûr, les superutilisateurs contournent cette vérification.)

Examples

Créer un schéma :

CREATE SCHEMA myschema;

créer un schéma pour l’utilisateur joe ; le schéma sera également nommé joe :

CREATE SCHEMA AUTHORIZATION joe;

créer un schéma nommé test qui sera détenu par l’utilisateur joe , sauf s’il existe déjà un schéma nommé test . (peu importe que joe soit propriétaire du schéma préexistant.)

CREATE SCHEMA IF NOT EXISTS test AUTHORIZATION joe;

Créer un schéma et créer une table et une vue à l’intérieur :

CREATE SCHEMA hollywood
    CREATE TABLE films (title text, release date, awards text[])
    CREATE VIEW winners AS
        SELECT title, release FROM films WHERE awards IS NOT NULL;

notez que les sous-commandes individuelles ne se terminent pas par des points-virgules.

以下是实现相同结果的等效方式:

CREATE SCHEMA hollywood;
CREATE TABLE hollywood.films (title text, release date, awards text[]);
CREATE VIEW hollywood.winners AS
    SELECT title, release FROM hollywood.films WHERE awards IS NOT NULL;

Compatibility

SQL 标准允许 DEFAULT CHARACTER SET 子句在 CREATE SCHEMA 中,也可以采用比 PostgreSQL 目前支持的更多子命令类型。

SQL 标准规定 CREATE SCHEMA 中的子命令可以按任意顺序出现。PostgreSQL 当前实现不支持子命令中的所有向前引用情况;有时可能需要重新订购子命令以避免向前引用。

根据 SQL 标准,架构所有者始终拥有其中所有对象。PostgreSQL 允许架构包含非架构所有者拥有的对象。这只有在架构所有者将 CREATE 权限授予给他人或超级用户选择在其内创建对象时才有可能。

IF NOT EXISTS 选项是 PostgreSQL 扩展。

See Also