17

我在远程服务器上设置了一个 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;

但它告诉我 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)
4

2 回答 2

31

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

sudo -u postgres psql my_app_development
create extension hstore;

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

于 2013-10-19T15:40:55.280 回答
7

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

于 2013-10-19T15:39:42.323 回答