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