Récemment j'ai eu des ennuis en essayant d'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 j'ai naïvement pensé 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)
Existe-t-il un moyen d'avoir automatiquement hstore dans une base de données nouvellement créée?
Bref:
Installez hstore dans la base de données template1:
psql -d template1 -c 'create extension hstore;'
Explication étape par étape:
Comme indiqué par la documentation PostgreSQL :
CREATE EXTENSION charge une nouvelle extension dans la base de données actuelle.
L'installation d'une extension est spécifique à la base de données. Ce qui suit vous renvoie le nom de la base de données actuelle:
$ 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, tu l'as. Maintenant, pour créer de nouvelles bases de données avec hstore installé, vous devrez l'installer dans le template1
base de données. Selon le doc :
CREATE DATABASE fonctionne réellement en copiant une base de données existante. Par défaut, il copie la base de données système standard nommée template1.
Faisons cela:
$ psql -d template1 -c 'create extension hstore;'
Et vérifiez que cela 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)
Terminé!