如何创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)
完成!