最近I went into trouble尝试将hstore与Django一起使用。我用这种方式安装了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?
答案 0 :(得分:105)
长话短说:
在template1数据库中安装hstore:
psql -d template1 -c 'create extension hstore;'
分步说明:
如the PostgreSQL documentation所述:
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
数据库中。根据{{3}}:
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)
完成!
答案 1 :(得分:0)
还请记住,hstore位于Public模式中,因此,如果您使用其他模式,则应使用public.hstore(record)格式