CREATE SCHEMA

Name

CREATE SCHEMA -- definiert ein neues Schema

Synopsis

CREATE SCHEMA schemaname [ AUTHORIZATION benutzername ] [ schemaelement [ ... ] ]
CREATE SCHEMA AUTHORIZATION benutzername [ schemaelement [ ... ] ]

Beschreibung

CREATE SCHEMA erzeugt ein neues Schema in der aktuellen Datenbank. Der Name muss sich von allen anderen Schemas in der aktuellen Datenbank unterscheiden.

Ein Schema ist im Prinzip ein Namensraum: Es enthält benannte Objekte (Tabellen, Datentypen, Funktionen und Operatoren), die die gleichen Namen haben können wie andere Objekte in Schemas. Auf benannte Objekte wird zugegriffen, indem man entweder ihre Namen mit dem Schemanamen als Präfix „qualifiziert“ oder die gewünschten Schemas in den Suchpfad einfügt.

Wahlweise kann CREATE SCHEMA Unterbefehle enthalten, um Objekte in dem neuen Schema zu erzeugen. Die Unterbefehle werden im Prinzip genauso wie Befehle behandelt, die getrennt nach der Erzeugung des Schemas ausgeführt werden, außer dass wenn die AUTHORIZATION-Klausel verwendet wird, alle erzeugte Objekte dann diesem Benutzer gehören.

Um ein Schema zu erzeugen muss der Benutzer das Privileg CREATE für die aktuelle Datenbank haben. (Superuser umgehen diese Prüfung natürlich.)

Parameter

schemaname

Der Name des zu erzeugenden Schemas. Wenn er weggelassen wird, dann erhält das Schema den Namen des aktuellen Benutzers.

benutzername

Der Name des Benutzers, dem das Schema gehören soll. Wenn er weggelassen wird, dann gehört das Schema dem Benutzer, der den Befehl ausführt. Nur Superuser können Schemas erzeugen, die anderen Benutzern gehören.

schemaelement

Ein SQL-Befehl, der ein Objekt definiert, das im Schema erzeugt werden soll. Gegenwärtig sind nur die Befehle CREATE TABLE, CREATE VIEW und GRANT innerhalb von CREATE SCHEMA erlaubt. Andere Objekte können in getrennten Befehlen, nachdem das Schema erzeugt worden ist, definiert werden.

Meldungen

CREATE SCHEMA

Meldung, wenn das Schema erfolgreich erzeugt wurde.

ERROR: namespace "schemaname" already exists

Meldung, wenn das angegebene Schema bereits existiert.

Beispiele

Dieser Befehl erzeugt ein einfaches Schema:

CREATE SCHEMA mein_schema;

Dieser Befehl erzeugt ein Schema für den Benutzer fred; das Schema wird ebenfalls fred heißen:

CREATE SCHEMA AUTHORIZATION fred;

Dieser Befehl erzeugt ein Schema mit einer Tabelle und einer Sicht darin:

CREATE SCHEMA hollywood
    CREATE TABLE filme (titel text, kinostart date, preise text[])
    CREATE VIEW gewinner AS
        SELECT titel, kinostart FROM filme WHERE preise IS NOT NULL;

Beachten Sie, dass die einzelnen Unterbefehle nicht durch Semikolons getrennt sind.

Das gleiche wie oben kann auch mit folgenden Befehlen erreicht werden:

CREATE SCHEMA hollywood;
CREATE TABLE hollywood.filme (titel text, kinostart date, preise text[]);
CREATE VIEW hollywood.gewinner AS
    SELECT titel, kinostart FROM hollywood.filme WHERE preise IS NOT NULL;

Kompatibilität

Der SQL-Standard erlaubt zusätzlich die Klausel DEFAULT CHARACTER SET im Befehl CREATE SCHEMA, sowie mehr Unterbefehlsarten als gegenwärtig von PostgreSQL akzeptiert werden.

Der SQL-Standard schreibt vor, dass die Unterbefehle in CREATE SCHEMA in beliebiger Reihenfolge auftreten können. Die gegenwärtige Implementierung in PostgreSQL kann nicht alle Fälle von Vorwärtsverweisen in den Unterbefehlen verarbeiten; daher kann es manchmal nötig sein, die Befehle umzusortieren um Vorwärtsverweise zu vermeiden.

Nach dem SQL-Standard ist der Eigentümer eines Schemas der Eigentümer aller Objekte im Schema. PostgreSQL erlaubt, dass Schemas Objekte enthalten können, die anderen Benutzern als dem Schemaeigentümer gehören. Das kann aber nur passieren, wenn der Schemaeigentümer jemandem anders das Privileg CREATE gewährt.

Siehe Auch

DROP SCHEMA