2012-09-25 14 views
12

Estoy tratando de usar PostgreSQL con el libro "Siete bases de datos en siete semanas". Estoy usando PostgreSQL 8.4.1 en un servidor Ubuntu 10.04.Problema al instalar un cubo de módulo adicional en PostgreSQL 8.4

La primera tarea es crear una base de datos llamada "libro" y comprobar si los paquetes contrib se han instalado correctamente.

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

Cuando hago que me da el siguiente resultado:

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

ya he instalado el paquete de cubo con el siguiente comando:

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

Traté de reiniciar PostgreSQL, pero el problema persiste . Cuando intenté ejecutar el paquete de importar una segunda vez me dieron el siguiente mensaje, que establece explícitamente que 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 

Entonces, ¿qué estoy haciendo mal?

Respuesta

11

Usted solo instaló la extensión en su base de datos postgres (la base de datos predeterminada del sistema denominada "postgres") - que probablemente sea no lo que desea. Debe instalar la extensión en su base de datos, una vez por cada base de datos en la que usarla.

O puede instalarlo en una base de datos de plantilla (template1 por defecto, pero cualquier base de datos se puede utilizar como plantilla) para que cada nueva base de datos creada comienza con pre-instalado la funcionalidad.

En PostgreSQL 8.4 o más, es necesario ejecutar en la cáscara:

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

Dónde dbname es el nombre de su base de datos de destino real. O usa la línea equivalente que tienes en tu pregunta.
More info for PostgreSQL 8.4 in the manual here.

Desde PostgreSQL 9.1 esto ha sido aún más simplificada y sólo puede funcionar en una sesión de base de datos:

CREATE extension cube 

More in the manual here.

+0

Gracias! Eso lo hizo. También probé el método para PostgreSQL 9.1 en otra máquina con Ubuntu 12.04. –

6

El comando completo para 9.1 es:

psql -d dbname 
    CREATE EXTENSION cube; 
    \q 

Dónde dbname es el nombre de la base de datos que desea añadir la extensión a. Tenga en cuenta que el último comando es una reacción violenta q para salir. Y no olvides el punto y coma al final de la segunda.

Cuestiones relacionadas