2012-09-25 20 views
12

Próbuję użyć PostgreSQL z książką "Siedem baz danych w siedem tygodni". Używam PostgreSQL 8.4.1 na serwerze Ubuntu 10.04.Problem z instalacją dodatkowej kostki modułu w PostgreSQL 8.4

Pierwszym zadaniem jest utworzenie bazy danych o nazwie "book" i sprawdzenie, czy pakiety contrib zostały poprawnie zainstalowane.

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

Kiedy robię, że pojawia się następujący komunikat:

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

już zainstalowany pakiet kostki za pomocą następującego polecenia:

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

Próbowałem ponownym PostgreSQL ale problem utrzymuje się . Kiedy próbowałem uruchomiony pakiet import po raz drugi mam następujący komunikat, który wyraźnie stwierdza, że ​​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 

Więc, co robię źle?

Odpowiedz

11

Zainstalowałeś tylko rozszerzenie do bazy danych postgres (domyślna systemowa baza danych o nazwie "postgres") - prawdopodobnie jest to , a nie, czego potrzebujesz. Musisz zainstalować rozszerzenie do swojej bazy danych - raz na bazę danych, w której można z niego korzystać.

Albo można go zainstalować na bazie szablonu (template1 domyślnie, ale dowolny baza danych może być używany jako szablon) tak, że każda nowa baza danych utworzona rozpoczyna się z funkcjonalnością zainstalowane.

W PostgreSQL 8.4 lub starszy, trzeba uruchomić w powłoce:

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

Gdzie dbname to nazwa aktualnej db docelowej. Lub użyj równoważnej linii, którą masz w swoim pytaniu.
More info for PostgreSQL 8.4 in the manual here.

Ponieważ PostgreSQL 9.1 to było jeszcze bardziej uproszczone i można po prostu uruchomić w sesji bazy:

CREATE extension cube 

More in the manual here.

+0

Dzięki! Tak było. Próbowałem także metody dla PostgreSQL 9.1 na innej maszynie z systemem Ubuntu 12.04. –

6

Pełne polecenie 9.1:

psql -d dbname 
    CREATE EXTENSION cube; 
    \q 

Gdzie nazwa_bazy_danych jest nazwą bazy danych, którą chcesz dodać rozszerzenie. Należy zauważyć, że ostatnie polecenie jest luzem q, aby zakończyć. I nie zapomnij średnika na końcu drugiego.