web-dev-qa-db-ja.com

hstore拡張機能が既にインストールされている新しいデータベースを作成する方法は?

最近 私はトラブルに巻き込まれました Djangoで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を自動的に保持する方法はありますか?

53
Maxime R.

長編短編:

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

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

詳細な説明:

PostgreSQLドキュメント で述べられているように:

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データベースにインストールする必要があります。 ドキュメント によると:

CREATE DATABASEは、実際には既存のデータベースをコピーすることで機能します。デフォルトでは、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)

できた!

107
Maxime R.