it-swarm.com.de

Wie erstelle ich eine neue Datenbank mit der bereits installierten hstore-Erweiterung?

Vor kurzem ich bin in Schwierigkeiten geraten habe versucht, hstore mit Django zu benutzen. Ich habe hstore folgendermaßen installiert:

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

Und naiv gedacht, dass meine neuen Datenbanken hstore enthalten würden. Das ist nicht der Fall:

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

Gibt es eine Möglichkeit, Hstore automatisch in einer neu erstellten Datenbank zu haben?

53
Maxime R.

Lange Rede, kurzer Sinn:

Installieren Sie hstore in der template1-Datenbank:

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

Schrittweise Erklärung:

Wie in der PostgreSQL-Dokumentation angegeben:

CREATE EXTENSION lädt eine neue Erweiterung in die aktuelle Datenbank.

Die Installation einer Erweiterung ist datenbankspezifisch. Folgendes gibt den aktuellen Datenbanknamen zurück:

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

Falls Sie eine Datenbank haben, die nach Ihrem Benutzernamen benannt ist. Jetzt mit dbtest:

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

Ok, du hast es verstanden. Um nun neue Datenbanken mit installiertem hstore zu erstellen, müssen Sie diese in der Datenbank template1 Installieren. Laut the doc :

CREATE DATABASE funktioniert tatsächlich durch Kopieren einer vorhandenen Datenbank. Standardmäßig wird die Standardsystemdatenbank mit dem Namen template1 kopiert.

Lass uns das machen:

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

Und überprüfe, ob es funktioniert:

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

Erledigt!

107
Maxime R.