Postgres hstore существует и не существует в одно и то же время - программирование
Подтвердить что ты не робот

Postgres hstore существует и не существует в одно и то же время

Я установил приложение Rails на удаленном сервере и создал расширение hstore

 sudo -u postgres psql
 CREATE EXTENSION hstore;

Затем я развернул итерацию приложения, которое использует hstore в одной из таблиц postgres, но когда он выполнял миграцию, он дал сообщение об ошибке

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

Затем я попытался сделать это снова

 sudo -u postgres psql
 CREATE EXTENSION hstore;

но он сказал, что hstore уже существует

ERROR:  extension "hstore" already exists

и этот круг продолжался.

Любая идея, что может вызвать эту проблему? Я использую postgres 9.1 на сервере Ubuntu 12.04

Обновление Обратите внимание, что, если эта проблема связана с разрешениями, я попытался проверить мои разрешения как это, но получил следующую ошибку:

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)
4b9b3361

Ответ 1

Чтобы создать расширение в своей базе данных, вы должны явно подключиться к этой базе данных. Итак, если ваша база данных my_app_development, вам нужно сделать:

sudo -u postgres psql my_app_development
create extension hstore;

Кроме того, вы не укажете, какую версию рельсов вы используете. Если вы не на рельсах-4, вам нужно будет использовать postgres hstore gem.