CREATE DATABASE

Name

CREATE DATABASE -- erzeugt eine neue Datenbank

Synopsis

CREATE DATABASE name
    [ [ WITH ] [ OWNER [=] eigentümer ]
           [ LOCATION [=] 'pfad' ]
           [ TEMPLATE [=] template ]
           [ ENCODING [=] kodierung ] ]

Beschreibung

CREATE DATABASE erzeugt eine neue PostgreSQL-Datenbank.

Normalerweise wird der aktuelle Benutzer der Eigentümer der neuen Datenbank. Superuser können Datenbanken erzeugen, die jemandem anders gehören, indem sie die OWNER-Klausel verwenden. Dadurch können Datenbanken für Benutzer, die keine besonderen Privilegien haben, erzeugt werden. Normale Benutzer mit dem Privileg CREATEDB können nur Datenbanken mit sich selbst als Eigentümer erzeugen.

Ein alternativer Speicherplatz kann für die Datenbank angegeben werden, um sie zum Beispiel auf einer anderen Festplatte abzulegen. Der Pfad muss mit dem Befehl initlocation vorbereitet worden sein.

Wenn der Pfadname keinen Schrägstrich enthält, dann wird er als Umgebungsvariable interpretiert, welche dem Serverprozess bekannt sein muss. Dadurch kann der Datenbankadministrator kontrollieren, wo Datenbanken erzeugt werden können. (Eine gebräuchliche Wahl ist zum Beispiel PGDATA2.) Wenn der Server mit ALLOW_ABSOLUTE_DBPATHS kompiliert wurde (nicht in der Standardeinstellung), dann werden absolute Pfadnamen, welche einen führenden Schrägstrich haben (z.B. /usr/local/pgsql/data), ebenfalls erlaubt.

Normalerweise wird eine neue Datenbank erzeugt, indem die Systemdatenbank template1 kopiert wird. Eine andere Template-Datenbank kann mit der Klausel TEMPLATE name angegeben werden. Insbesondere kann man mit TEMPLATE template0 eine „jungfräuliche“ Datenbank erzeugen, die nur die Standardobjekte Ihrer PostgreSQL-Version enthält. Das ist nützlich, wenn Sie vermeiden wollen, dass Objekte, die Sie in template1 erzeugt haben, kopiert werden.

Mit dem optionalen Parameter ENCODING wird die Zeichensatzkodierung für die Datenbank ausgewählt. Wenn er nicht angegeben ist, dann wird die Kodierung der gewählten Template-Datenbank verwendet.

Parameter

name

Der Name der zu erzeugenden Datenbank.

eigentümer

Der Name des Datenbankbenutzers, dem die neue Datenbank gehören soll, oder DEFAULT um den Vorgabewert zu verwenden (der Benutzer, der den Befehl ausführt).

pfad

Eine alternative Stelle im Dateisystem, an der die neue Datenbank angelegt werden soll, angegeben als Zeichenkettenkonstante; oder DEFAULT um den Standard zu verwenden.

template

Der Name der Template-Datenbank, aus der die neue Datenbank erzeugt werden soll, oder DEFAULT um das Standardtemplate (template1) zu verwenden

kodierung

Die Zeichensatzkodierung für die neue Datenbank. Geben Sie eine Zeichenkettenkonstante (z.B. 'SQL_ASCII') oder eine Kodierungsnummer oder DEFAULT, um die Standardkodierung zu verwenden, an.

Die optionalen Parameter können in beliebiger Reihenfolge angegeben werden, nicht nur in der oben gezeigten.

Meldungen

CREATE DATABASE

Meldung, wenn die Datenbank erfolgreich erzeugt wurde.

ERROR: user 'username' is not allowed to create/drop databases

Sie müssen das besondere Privileg CREATEDB haben um Datenbanken zu erzeugen. Siehe CREATE USER.

ERROR: createdb: database "name" already exists

Diese Meldung erscheint, wenn eine Datenbank mit dem angegebenen Namen bereits existiert.

ERROR: database path may not contain single quotes

Der Datenbankspeicherplatz pfad darf keine Apostrophe enthalten. Das ist nötig, damit die Shell-Befehle, die das Datenbankverzeichnis erzeugen, sicher ausgeführt werden können.

ERROR: CREATE DATABASE: may not be called in a transaction block

Wenn Sie einen expliziten Transaktionsblock offen haben, dann können Sie CREATE DATABASE nicht ausführen. Beenden Sie zuerst den Transaktionsblock.

ERROR: Unable to create database directory 'path'.
ERROR: Could not initialize database directory.

Diese Meldungen deuten am wahrscheinlichsten auf Dateisystemprobleme, wie fehlende Zugriffsrechte auf das Datenverzeichnis oder eine volle Festplatte, hin. Der Benutzer, unter dem der Datenbankserver läuft, muss Zugriff auf das entsprechende Verzeichnis haben.

Hinweise

Das Programm createdb führt diesen Befehl aus und kann von der Shell aus aufgerufen werden.

Die Verwendung von alternativen Speicherplätzen, die mit absoluten Pfadnamen angegeben werden, stellt ein Sicherheitsproblem dar. Weitere Informationen finden Sie in Abschnitt 18.5.

Obwohl es möglich ist, andere Datenbanken außer template1 zu kopieren, indem ihr Name als Template-Datenbank angegeben wird, ist dies (noch) keine generell anwendbare Methode zum Kopieren von Datenbanken. Wir empfehlen, dass Datenbanken, die als Template verwendet werden sollen, als nicht beschreibbar behandelt werden. Weitere Informationen dazu finden Sie in Abschnitt 18.3.

Beispiele

Um eine neue Datenbank zu erzeugen:

CREATE DATABASE lusiadas;

Um eine neue Datenbank in alternativen Verzeichnis ~/private_db zu erzeugen, führen Sie Folgendes in der Shell aus:

mkdir private_db
initlocation ~/private_db

Danach führen Sie Folgendes in einer psql-Sitzung aus:

CREATE DATABASE anderswo WITH LOCATION '/home/olly/private_db';

Kompatibilität

Der Befehl CREATE DATABASE ist eine PostgreSQL-Erweiterung. Datenbanken entsprechen im SQL-Standard Katalogen und deren Erzeugung ist der Implementierung überlassen.

Siehe Auch

DROP DATABASE, createdb