postgres hstore存在且不存在于同一时间

Tom*_*chi 15 postgresql ruby-on-rails postgresql-9.1

我在远程服务器上设置了一个Rails应用程序并创建了一个hstore扩展

 sudo -u postgres psql
 CREATE EXTENSION hstore;
Run Code Online (Sandbox Code Playgroud)

然后,我在其中一个postgres表中部署了一个使用hstore的应用程序的迭代,但是当它运行迁移时,它给出了一条错误消息

PG::UndefinedObject: ERROR:  type "hstore" does not exist
Run Code Online (Sandbox Code Playgroud)

然后我再次尝试这样做

 sudo -u postgres psql
 CREATE EXTENSION hstore;
Run Code Online (Sandbox Code Playgroud)

但它告诉我hstore已经存在

ERROR:  extension "hstore" already exists
Run Code Online (Sandbox Code Playgroud)

这圈继续.

知道可能导致这个问题的原因是什么?我在Ubuntu 12.04服务器上使用postgres 9.1

更新 注意,想知道这个问题是否与权限有关,我试图检查我的权限,但是得到了以下错误

sudo -u postgres psql -U username
psql: FATAL:  Peer authentication failed for user "username"
Run Code Online (Sandbox Code Playgroud)

更新 虽然安装了hstore,但它不是我正在使用的数据库的扩展.如何在特定的数据库中安装它?

psql -d db_production -c '\dx'
                 List of installed extensions
  Name   | Version |   Schema   |         Description          
---------+---------+------------+------------------------------
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
(1 row)
Run Code Online (Sandbox Code Playgroud)

kik*_*kik 30

要在数据库中创建扩展,必须显式连接到该数据库.所以,如果您的数据库是my_app_development,您必须这样做:

sudo -u postgres psql my_app_development
create extension hstore;
Run Code Online (Sandbox Code Playgroud)

此外,您不会告诉您正在使用哪个rails版本.如果您不在rails-4上,则必须使用postgres hstore gem.

  • 我已经尝试了您的步骤,但仍然说“错误:扩展名“ hstore”已存在”。 (2认同)

Tom*_*chi 5

使用此SO答案如何创建已安装hstore扩展的新数据库?,我发现我必须为template1数据库创建扩展,然后我创建的任何其他数据库都会安装它