sql - son - ¿Cómo crear una nueva base de datos con la extensión hstore ya instalada?
separar y adjuntar una base de datos en sql server (1)
Recientemente tuve problemas tratando de usar hstore con Django. Instalé 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 manera de tener automáticamente hstore en una base de datos recién creada?
Larga historia corta:
Instale hstore en la base de datos template1:
psql -d template1 -c ''create extension hstore;''
Explicación paso a paso:
Según lo declarado por 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. A continuación, le devuelve el nombre de la base de datos actual:
$ psql -c ''select current_database()''
current_database
------------------
username
(1 row)
En caso de que tenga una base de datos nombrada después 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á que instalarlo en la base de datos template1
. De acuerdo con el documento :
CREATE DATABASE realmente funciona al copiar una base de datos existente. Por defecto, copia la base de datos del sistema estándar llamada template1.
Hagámoslo:
$ psql -d template1 -c ''create extension hstore;''
Y comprueba que funcione:
$ 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!