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)
Ответы
Ответ 1
Чтобы создать расширение в своей базе данных, вы должны явно подключиться к этой базе данных. Итак, если ваша база данных my_app_development
, вам нужно сделать:
sudo -u postgres psql my_app_development
create extension hstore;
Кроме того, вы не укажете, какую версию рельсов вы используете. Если вы не на рельсах-4, вам нужно будет использовать postgres hstore gem.
Ответ 2
Используя этот ответ SO Как создать новую базу данных с уже установленным расширением hstore?, я узнал, что мне нужно было создать расширение для базы данных template1 и то любая другая база данных, которую я создал после этого, установила бы ее