ruby-on-rails – postgres hstore存在并且不存在同时

参见英文答案 > How to create a new database with the hstore extension already installed?1
我在远程服务器上设置了一个Rails应用程序,并创建了一个hstore扩展
sudo -u postgres psql
 CREATE EXTENSION hstore;

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

PG::Undefinedobject: ERROR:  type "hstore" does not exist

然后,我再次尝试这样做

sudo -u postgres psql
 CREATE EXTENSION hstore;

但它告诉我,商店已经存在

ERROR:  extension "hstore" already exists

这个圈子继续下去了.

任何想法可能导致这个问题?我在Ubuntu 12.04服务器上使用postgres 9.1

更新
注意,如果这个问题与权限有关,我试图检查我的权限,但是出现以下错误

sudo -u postgres psql -U username
psql: FATAL:  Peer authentication Failed for user "username"

更新
虽然安装了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)

解决方法

要在数据库中创建扩展名,必须显式连接到该数据库.所以,如果你的数据库是my_app_development,你必须做:
sudo -u postgres psql my_app_development
create extension hstore;

另外,你不知道你在哪个rails版本.如果你不在rails-4上,你将不得不使用postgres hstore gem.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...