18.5. Emplacements alternatifs

Il est possible de créer une base de données à un emplacement différent de l'emplacement par défaut après installation. Mais n'oubliez pas que tous les accès base de données se font à travers le serveur de bases de données, et donc que ce nouvel emplacement doit être accessible au serveur.

Les emplacements de bases de données alternatifs sont spécifiés par une variable d'environnement qui indique le chemin absolu de l'emplacement voulu. Cette variable d'environnement doit être présente dans l'environnement du serveur, donc elle doit avoir été définie avant le démarrage du serveur. (Ainsi, l'ensemble des emplacements alternatifs disponibles est sous le contrôle de l'administrateur du site ; les simples utilisateurs ne peuvent pas le modifier.) Tout nom valide de variable d'environnement peut être utilisé pour spécifier un emplacement alternatif, bien qu'il soit recommandé d'utiliser des noms de variables ayant pour préfixe PGDATA afin d'éviter la confusion ou des conflits avec d'autres variables.

Pour créer la variable dans l'environnement du serveur, vous devez d'abord stopper ce dernier, définir la variable, initialiser l'aire de stockage des données et finalement relancer le serveur. (Voir également la Section 16.6 et la Section 16.3.) Pour définir une variable d'environnement, tapez

      PGDATA2=/home/postgres/data
      export PGDATA2
     

dans un shell Bourne ou

      setenv PGDATA2 /home/postgres/data
     

dans csh ou tcsh. Vous devez faire en sorte que cette variable d'environnement soit toujours définie dans l'environnement du serveur, sinon vous ne pourrez pas accéder à cette aire de stockage. Un moyen d'y parvenir est de la définir dans le script de démarrage du serveur.

Pour créer une aire de stockage de données dans PGDATA2, assurez-vous tout d'abord que le répertoire appelé à la contenir (ici, /home/postgres) existe bien et qu'il est accessible en écriture au compte utilisateur qui exécute le serveur (voir la Section 16.1). Ensuite, tapez sur la ligne de commande :

      initlocation PGDATA2
     

(et non pas initlocation $PGDATA2). Vous pouvez alors relancer le serveur.

Pour créer une base de données dans la nouvelle aire de stockage, utilisez la commande SQL

      CREATE DATABASE nom WITH LOCATION
      'emplacement';
     

ou emplacement est le nom de la variable d'environnement que vous avez utilisé, PGDATA2 dans cet exemple. La commande shell createdb dispose de l'option -D pour arriver au même résultat.

Les bases de données créées dans des emplacements alternatifs peuvent être accédées et détruites de la même manière que n'importe quelle base de données.

Note : Il est également possible de spécifier directement un chemin absolu à la commande CREATE DATABASE sans passer par une variable d'environnement. Mais c'est interdit par défaut parce que cela constitue une brèche de sécurité. Pour l'autoriser, vous devez compiler PostgreSQL avec la macro du préprocesseur C ALLOW_ABSOLUTE_DBPATHS définie. Un moyen de le faire est d'exécuter la compilation de cette manière :

      gmake CPPFLAGS=-DALLOW_ABSOLUTE_DBPATHS all