Подтвердить что ты не робот

Не удалось установить дополнительный куб модуля в PostgreSQL 8.4

Я пытаюсь использовать PostgreSQL с книгой "Семь баз данных за семь недель". Я использую PostgreSQL 8.4.1 на сервере Ubuntu 10.04.

Первой задачей является создание базы данных с именем "книга" и проверка правильности установки пакетов Contrib.

$ createdb book
$ psql book -c "SELECT '1'::cube;"

Когда я делаю это, я получаю следующий вывод:

ERROR:  type "cube" does not exist
LINE 1: SELECT '1'::cube;

Я уже установил куб-пакет со следующей командой:

$ sudo -u postgres psql postgres < /usr/share/postgresql/8.4/contrib/cube.sql

Я попытался перезапустить PostgreSQL, но проблема не устранена. Когда я попытался запустить импорт пакета во второй раз, я получил следующее сообщение, в котором явно указано, что type "cube" already exists:

SET
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
ERROR:  type "cube" already exists
COMMENT
CREATE FUNCTION
COMMENT
CREATE FUNCTION
COMMENT
CREATE FUNCTION
COMMENT
CREATE FUNCTION
COMMENT
CREATE FUNCTION
COMMENT
CREATE FUNCTION
COMMENT
CREATE FUNCTION
COMMENT
CREATE FUNCTION
COMMENT
CREATE FUNCTION
COMMENT
CREATE FUNCTION
COMMENT
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
ERROR:  operator < already exists
ERROR:  operator > already exists
ERROR:  operator <= already exists
ERROR:  operator >= already exists
ERROR:  operator && already exists
ERROR:  operator = already exists
ERROR:  operator <> already exists
ERROR:  operator @> already exists
ERROR:  operator <@ already exists
ERROR:  operator @ already exists
ERROR:  operator ~ already exists
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
ERROR:  operator class "cube_ops" for access method "btree" already exists
ERROR:  operator class "gist_cube_ops" for access method "gist" already exists

Итак, что я делаю неправильно?

4b9b3361

Ответ 1

Вы только установили расширение в свою базу данных postgres (системная база данных по умолчанию "postgres" ) - это, вероятно, не, что вы хотите. Вам необходимо установить расширение в свою базу данных - один раз для каждой базы данных, в которой он будет использоваться.

Или вы можете установить его в базу данных шаблона (template1 по умолчанию, но любую базу данных можно использовать в качестве шаблона), чтобы каждая новая база данных запускалась с предустановленной функциональностью.

В PostgreSQL 8.4 или старше вам нужно запустить в оболочке:

psql -d dbname -f SHAREDIR/contrib/cube.sql

Где dbname - имя вашего фактического целевого db. Или используйте эквивалентную строку, которая у вас есть в вашем вопросе.
Подробнее о PostgreSQL 8.4 в руководстве здесь.

Так как PostgreSQL 9.1 это было дополнительно упрощено, и вы можете просто запустить в сеансе базы данных:

CREATE extension cube

Подробнее в руководстве здесь.

Ответ 2

Полная команда для 9.1:

   psql -d dbname  
   CREATE EXTENSION cube;  
   \q

Где dbname - это имя базы данных, к которой вы хотите добавить расширение. Обратите внимание, что последняя команда представляет собой люфт q для выхода. И не забудьте точку с запятой в конце второго.