如何创build一个已经安装了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) 

有没有办法自动在新创build的数据库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) 

好的,你知道了。 现在,要创build安装了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) 

完成!

Interesting Posts