Schémas et extensions

      La méthode proposée pour simplifier la gestion des schémas a été mise à jour afin de contrer les risques liés à la faille de sécurité CVE-2018-1058.
      Une interrogation peut se poser à propos des extensions. Dans quel(s) schéma(s) les installer ?
      Pour certaines extensions, il n'y a aucune question à se poser car elles s'installent obligatoirement dans pg_catalog. C'est le cas de plpythonu par exemple.
      Pour les autres extensions, je suggère de créer au moins un schéma dédié. Il est par exemple possible de créer UN schéma spécial par base appelé "extensions". Ce schéma ne devra alors servir QUE pour accueillir des extensions validées installées toujours par le même superuser (exemple postgres).
      Ce ou ces schémas seront alors ajoutés au search_path fixé au niveau du cluster, de la base ou de l'utilisateur, selon le degré de granularité souhaité.
      Exemple avec l'extension "uuid_ossp" créée dans un schéma général "extensions" ajouté au search_path général (niveau cluster) :

select version(); version ---------------------------------------------------------------------------------------------------------------------------------- PostgreSQL 10.3 (Debian 10.3-1.pgdg90+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit (1 ligne) create schema extensions; CREATE SCHEMA CREATE EXTENSION IF NOT EXISTS "uuid-ossp" schema extensions; CREATE EXTENSION select uuid_generate_v4(); ERREUR: la fonction uuid_generate_v4() n'existe pas LIGNE 1 : select uuid_generate_v4(); ^ ASTUCE : Aucune fonction ne correspond au nom donné et aux types d'arguments. Vous devez ajouter des conversions explicites de type. show search_path; search_path ------------- "$user" (1 ligne) alter system set search_path="$user", extensions; ALTER SYSTEM select pg_reload_conf(); pg_reload_conf ---------------- t (1 ligne) \df Liste des fonctions Schéma | Nom | Type de données du résultat | Type de données des paramètres | Type ------------+--------------------+-----------------------------+--------------------------------+-------- extensions | uuid_generate_v1 | uuid | | normal extensions | uuid_generate_v1mc | uuid | | normal extensions | uuid_generate_v3 | uuid | namespace uuid, name text | normal extensions | uuid_generate_v4 | uuid | | normal extensions | uuid_generate_v5 | uuid | namespace uuid, name text | normal extensions | uuid_nil | uuid | | normal extensions | uuid_ns_dns | uuid | | normal extensions | uuid_ns_oid | uuid | | normal extensions | uuid_ns_url | uuid | | normal extensions | uuid_ns_x500 | uuid | | normal (10 lignes) select uuid_generate_v4(); uuid_generate_v4 -------------------------------------- c812a2c0-47b0-408d-94df-a62bf74f2641 (1 ligne)

Mise à jour : 16/03/2018