2012-07-20 4 views
49

最近I went into trouble Djangoでhstoreを使用しようとしています。私はhstoreのこの方法でインストール:hstore拡張機能が既にインストールされている新しいデータベースを作成するには?

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

そして、単純には、私の新しいデータベースがhstoreのを含んであろうと思いました。それはそうではありません:

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

新しく作成されたデータベースに自動的にhstoreを持つ方法はありますか?

答えて

96

かいつまん:the PostgreSQL documentationで述べたように

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

ステップバイステップの説明:

template1データベースにhstoreのをインストールします。 :

CREATE EXTENSIONは、現在のデータベースに新しい拡張をロードします。

拡張機能のインストールは、データベースに固有です。以下は現在のデータベース名を返します:

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

あなたのユーザ名の後に名前が付けられたデータベースがある場合。今すぐdbtestと:

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

あなたはそれを持っています。さて、hstoreがインストールされた新しいデータベースを作成するには、template1データベースにインストールする必要があります。 the doc

実際には、既存のデータベースをコピーすることによってデータベースを作成します。デフォルトでは、template1という名前の標準システムデータベースがコピーされます。

ははこのやろう:

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

そして、それが動作することを確認します

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

+10

+1正しいものであり、すべてを有用な形式にするためです。 'template1'以外のデータベースを使うことも考えられます。どのデータベースもテンプレートとして使用できます: 'CREATE DATABASE foo TEMPLATE mytemplate'。あるいは、 'template1'に追加のものがあれば、(デフォルトでは空の)' template0'を使うことができます。 –