¿Cómo crear una nueva base de datos con la extensión hstore ya instalada?


Recientemente Me metí en problemas tratando de usar hstore con Django. He instalado hstore de esta manera:

$ 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)

E ingenuamente pensé que mis nuevas bases de datos incluirían hstore. Ese no es el caso:

$ 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)

¿Hay alguna forma de tener hstore automáticamente en una base de datos recién creada ?

Author: Community, 2012-07-20

1 answers

En pocas palabras:

Instalar hstore en la base de datos template1:

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

Explicación paso a paso:

Como se indica en la documentación de PostgreSQL :

CREATE EXTENSION carga una nueva extensión en la base de datos actual.

La instalación de una extensión es específica de la base de datos. Lo siguiente le devuelve el nombre actual de la base de datos:

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

En caso de que tenga una base de datos con el nombre de su nombre de usuario. Ahora con dbtest:

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

Ok, lo tienes. Ahora, para crear nuevas bases de datos con hstore instalado, tendrás que instalarlo en la base de datos template1. Según el doc :

CREATE DATABASE realmente funciona copiando una base de datos existente. De forma predeterminada, copia la base de datos estándar del sistema llamada template1.

Hagamos esto:

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

Y comprueba que funciona:

$ 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)

Hecho!

 100
Author: Maxime R.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-20 18:10:23