| PostgreSQL: Das Offizielle Handbuch | ||||
|---|---|---|---|---|
| Zurück | Schnell zurück | Schnell nach vorne | Nach vorne | |
CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE sprachname
HANDLER handler [ VALIDATOR valfunktion ]Mit CREATE LANGUAGE kann ein PostgreSQL-Benutzer eine neue prozedurale Sprache in einer Datenbank registrieren. Danach können Funktion und Triggerprozeduren in dieser neuen Sprache geschrieben werden. Ein Benutzer muss ein PostgreSQL-Superuser sein um eine neue Sprache registrieren zu können.
CREATE LANGUAGE verbindet im Prinzip den Sprachnamen mit einer Handlerfunktion, die dafür verantwortlich ist, die in dieser Sprache geschriebenen Funktionen auszuführen. Weitere Informationen über Sprachhandler finden Sie in Abschnitt 33.3.
Beachten Sie, dass prozedurale Sprachen immer nur in einer bestimmten Datenbank installiert werden. Um eine Sprache in allen Datenbanken verfügbar zu machen, installieren Sie sie in der Datenbank template1.
TRUSTED gibt an, dass der Handler für diese Sprache sicher ist, das heißt, dass er einem unprivilegierten Benutzer keine Möglichkeit gibt, Zugriffsbeschränkungen zu umgehen. Wenn dieses Schlüsselwort bei der Registrierung der Funktion weggelassen wird, dann werden nur PostgreSQL-Superuser diese Sprache für neue Funktionen verwenden können.
Dieses Wort hat keine Bedeutung.
Der Name der neuen prozeduralen Sprache. Groß- und Kleinschreibung werden nicht unterschieden. Der Name muss unter den Sprachen in der Datenbank einmalig sein.
Aus Kompatibilität mit früheren Versionen kann der Sprachname auch in Apostrophen stehen.
handler ist der Name einer vorher registrierten Funktion, die aufgerufen werden wird, um in der Sprache geschriebene Funktionen auszuführen. Der Handler einer prozeduralen Sprache muss in einer kompilierten Sprache wie C mit der Aufrufskonvention Version 1 geschrieben sein und in PostgreSQL als Funktion ohne Argumente und mit Rückgabetyp language_handler, einem Platzhaltertyp für Sprachhandler, registriert sein.
valfunktion ist der Name einer vorher registrierten Funktion, die aufgerufen werden wird, wenn eine neue Funktion in der Sprache erzeugt wird, um die Funktion zu überprüfen. Wenn keine Prüffunktion angegeben ist, dann wird die Funktion bei der Erzeugung nicht überprüft. Die Prüffunktion muss ein Argument vom Typ oid haben, welches die OID der zu erzeugenden Funktion enthalten wird, und wird in der Regel den Rückgabetyp void haben.
Eine Prüffunktion wird in der Regel den Funktionskörper auf syntaktische Fehler prüfen, kann aber auch andere Eigenschaften der Funktion betrachten, zum Beispiel wenn die Sprache nicht mit bestimmten Argumenttypen umgehen kann. Um einen Fehler anzuzeigen sollte die Prüffunktion die Funktion elog() aufrufen. Der Rückgabewert der Funktion wird ignoriert.
Dieser Befehl sollte nicht direkt von Anwendern ausgeführt werden. Für die in der PostgreSQL-Distribution gelieferten prozeduralen Sprachen sollte man das Programm createlang verwenden, dass auch den richtigen Handler installiert. (createlang ruft CREATE LANGUAGE intern auf.)
Vor PostgreSQL-Versionen vor 7.3 musste der Sprachhandler mit dem Platzhaltertyp opaque als Rückgabetyp deklariert werden, anstatt wie jetzt language_handler. Um alte Sicherungsdateien laden zu können, akzeptiert CREATE LANGUAGE Funktionen mit deklariertem Rückgabetyp opaque, wird aber eine Hinweismeldung ausgeben und den Rückgabetyp der Funktion in language_handler ändern.
Der Systemkatalog pg_language (siehe Abschnitt E.18) speichert Informationen über die aktuell installierten Sprachen. Außerdem hat createlang eine Option um alle installierten Sprachen anzuzeigen.
Die Definition einer prozeduralen Sprache kann nach der Erzeugung nicht mehr verändert werden, mit Ausnahme der Privilegien.
Um eine prozedurale Sprache verwenden zu können, muss dem entsprechenden Benutzer das Privileg USAGE gewährt werden. Das Programm createlang gibt automatisch jedem die Erlaubnis, die Sprache zu verwenden, wenn die Sprache als sicher (TRUSTED) bekannt ist.
Die folgenden zwei Befehle registrieren erst einen Sprachhandler und dann eine neue prozedurale Sprache.
CREATE FUNCTION plbeispiel_call_handler() RETURNS language_handler
AS '$libdir/plbeispiel'
LANGUAGE C;
CREATE LANGUAGE plbeispiel
HANDLER plbeispiel_call_handler;
| Zurück | Zum Anfang | Nach vorne |
| CREATE INDEX | Nach oben | CREATE OPERATOR |