Не удалось установить дополнительный куб модуля в 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
Итак, что я делаю неправильно?
Ответы
Ответ 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 для выхода. И не забудьте точку с запятой в конце второго.