CREATE EXTENSION — installe une nouvelle extension
CREATE EXTENSION [ IF NOT EXISTS ]nom_extension
[ WITH ] [ SCHEMAnom_schema
] [ VERSIONversion
] [ FROMancienne_version
] [ CASCADE ]
CREATE EXTENSION
charge une nouvelle extension dans la
base de donnée courante. Il ne doit pas y avoir d'extension déjà chargée
portant le même nom.
Charger une extension consiste essentiellement à exécuter le script de l'extension.
Ce script va créer dans la plupart des cas de nouveaux objets SQL
comme des fonctions, des types de données, des opérateurs et des méthodes d'indexation.
La commande CREATE EXTENSION
enregistre en supplément les identifiants
de chacun des objets créés, permettant ainsi de les supprimer lorsque la commande
DROP EXTENSION
est appelée.
Le chargement d'une extension nécessite les mêmes droits que ceux
qui permettent la création de ses objets. La plupart des extensions
nécessitent ainsi des droits superutilisateur ou d'être le propriétaire
de la base de donnée.
L'utilisateur qui lance la commande CREATE EXTENSION
devient alors le propriétaire de l'extension (une vérification ultérieure
des droits permettra de le confirmer) et le propriétaire de chacun
des objets créé par le script de l'extension.
IF NOT EXISTS
Permet de ne pas retourner d'erreur si une extension de même nom existe déjà. Un simple message d'avertissement est alors rapporté. À noter que l'extension existante n'a potentiellement aucun lien avec l'extension qui aurait pu être créée.
nom_extension
Le nom de l'extension à installer. PostgreSQL
créera alors l'extension en utilisant les instructions du fichier de contrôle
SHAREDIR/extension/
nom_extension
.control
.
nom_schema
Le nom du schéma dans lequel installer les objets de l'extension, en supposant que l'extension permette de déplacer ses objets dans un autre schéma. Le schéma en question doit exister au préalable. Si ce nom n'est pas spécifié et que le fichier de contrôle de l'extension ne spécifie pas de schéma, le schéma par défaut en cours sera utilisé.
Si l'extension indique un paramètre schema
dans son
fichier contrôle, alors ce schéma ne peut pas être surchargé avec une
clause SCHEMA
. Habituellement, une erreur est levée
si une clause SCHEMA
est indiquée et qu'elle entre en
conflit avec le paramètre schema
de l'extension.
Néanmoins, si la clause CASCADE
est aussi indiquée,
alors nom_schema
est ignoré
s'il y a conflit. Le nom_schema
indiqué sera utilisé pour
l'installation de toute extension qui ne précise pas
schema
dans son fichier contrôle.
Rappelez-vous que l'extension en soit n'est pas considérée comme étant dans un schéma. Les extensions ont des noms non qualifiés qui doivent être uniques au niveau de la base de données. Par contre, les objets appartenant à l'extension peuvent être dans des schémas.
version
La version de l'extension à installer. Il peut s'agir d'un identifiant autant que d'une chaîne de caractère. La version par défaut est celle spécifiée dans le fichier de contrôle de l'extension.
ancienne_version
L'option FROM
ancienne_version
doit être spécifiée si et seulement s'il s'agit de convertir un module ancienne génération
(qui est en fait une simple collection d'objets non empaquetée) en extension.
Cette option modifie le comportement de la commande CREATE EXTENSION
pour exécuter un script d'installation alternatif qui incorpore les objets existant dans
l'extension, plutôt que de créer de nouveaux objets. Il faut prendre garde à ce que
SCHEMA
spécifie le schéma qui contient ces objets pré-existant.
La valeur à utiliser pour le paramètre ancienne_version
est déterminée par l'auteur de l'extension et peut varier s'il existe plus d'une version
du module ancienne génération qui peut évoluer en une extension.
Concernant les modules additionnels fournis en standard avant
PostgreSQL 9.1, il est nécessaire d'utiliser
la valeur unpackaged
pour le paramètre
ancienne_version
pour les faire évoluer en extension.
CASCADE
Installe automatiquement toute extension non déjà présente dont cette extension dépend.
Leurs dépendances sont aussi automatiquement installées, récursivement. La clause
SCHEMA
, si elle est indiquée, s'applique à toutes les extensions
installées de cette façon. Les autres options de l'instruction ne sont pas appliquées
aux extensions créées automatiquement. En particulier, leurs versions par défaut
sont toujours sélectionnées.
Avant d'utiliser la commande CREATE EXTENSION
pour charger
une extension dans une base de données, il est nécessaire d'installer les fichiers qui l'accompagnent.
Les informations de Modules supplémentaires fournis
permettent d'installer les extensions fournies avec PostgreSQL.
Les extensions disponibles à l'installation sur le serveur peuvent être identifiées au moyen des vues systèmes
pg_available_extensions
et
pg_available_extension_versions
.
Installer une extension en tant que superutilisateur nécessite d'avoir
confiance dans le fait que l'auteur de l'extension a écrit le script
d'installation avec la sécurité en tpete. Il n'est pas particulièrement
compliqué pour un utilisateur ayant de mauvaises intentions de créer des
objets de type cheval de Troie qui comprométeront une exécution ultérieure
d'un script d'extension mal écrit, permettant à l'utilisateur d'acquérir
des droits superutilisateur. Néanmoins, les objets chevaux de Troie sont
seulement dangereux s'ils se trouvent dans le
search_path
lors de l'exécution du script, signifiant
qu'ils sont dans le schéma d'installation de l'extension ou dans le schéma
d'une extension dont l'extension installée dépend. De ce fait, une bonne
règle lors de la gestion d'extensions dont les scripts n'ont pas été
validés est de les installer seulement dans des schémas pour lesquels le
droit CREATE n'a pas été et ne sera jamais donné à des utilisateurs qui ne
bénéficient pas d'une confiance complète. De même pour toute extension
dont elle dépend.
Les extensions fournies avec PostgreSQL sont supposées être sécurisées contre les attaques à l'installation de ce type, sauf quelques unes dépendant d'autres extensions. Comme indiqué dans la documentation pour ces extensions, elles devraient être installées dans des schémas sécurisés ou installés dans les mêmes schémas que celles des extensions dont elles dépendant, ou les deux.
Pour obtenir des informations sur l'écriture de nouvelles extensions, consultez Section 37.17.
Installer l'extension hstore dans la base de
données courante, en plaçant ses objets dans le schéma
addons
:
CREATE EXTENSION hstore SCHEMA addons;
Une autre façon d'accomplir la même chose :
SET search_path = addons; CREATE EXTENSION hstore;
Mettre à jour le module pré-9.1 hstore
sous la forme
d'une extension :
CREATE EXTENSION hstore SCHEMA public FROM unpackaged;
Prenez garde à bien spécifier le schéma vers lequel vous souhaitez installer
les objets de hstore
.
La commande CREATE EXTENSION
est spécifique à
PostgreSQL.