61 votes

Comment créer une nouvelle base de données avec l'extension hstore déjà installée?

Récemment, j'ai eu du mal à utiliser hstore avec Django. J'ai installé hstore de cette façon:

 $ sudo -u postgres psql
postgres=# CREATE EXTENSION hstore;
WARNING:  => is deprecated as an operator name
DETAIL:  This name may be disallowed altogether in future versions of PostgreSQL.
CREATE EXTENSION
postgres=# \dx
                           List of installed extensions
  Name   | Version |   Schema   |                   Description                    
---------+---------+------------+--------------------------------------------------
 hstore  | 1.0     | public     | data type for storing sets of (key, value) pairs
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
(2 rows)
 

Et pensais naïvement que mes nouvelles bases de données incluraient hstore. Ce n'est pas le cas:

 $ createdb dbtest
$ psql -d dbtest -c '\dx'
                 List of installed extensions
  Name   | Version |   Schema   |         Description          
---------+---------+------------+------------------------------
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
(1 row)
 

Est-il possible d’avoir automatiquement hstore dans une base de données nouvellement créée?

117voto

Maxime R. Points 2199

Longue histoire courte:

Installer hstore dans la base de données template1:

psql -d template1 -c 'create extension hstore;'

Étape-par-étape des explications:

Comme l'a déclaré la documentation PostgreSQL:

CRÉER l'EXTENSION des charges d'une nouvelle extension dans la base de données actuelle.

L'installation d'une extension de base de données spécifique. Le suivant retourne le nom de base de données:

$ psql -c 'select current_database()'
 current_database 
------------------
 username
(1 row)

Dans le cas où vous avez une base de données nommée d'après votre nom d'utilisateur. Maintenant, avec dbtest:

$ psql -d dbtest -c 'select current_database()'
 current_database 
------------------
 dbtest
(1 row)

Ok, vous l'avez. Maintenant, pour créer de nouvelles bases de données avec hstore installé, vous devez l'installer dans l' template1 de la base de données. Selon la doc:

CRÉER une BASE de données fonctionne réellement par la copie d'une base de données existante. Par défaut, la copie de la norme de système de base de données template1.

Nous allons faire ceci:

$ psql -d template1 -c 'create extension hstore;'

Et vérifier qu'il fonctionne :

$ createdb dbtest
$ psql -d dbtest -c '\dx'
                 List of installed extensions
  Name   | Version |   Schema   |                   Description                    
---------+---------+------------+--------------------------------------------------
 hstore  | 1.0     | public     | data type for storing sets of (key, value) pairs
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
(2 rows)

Fait!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X