无法在PostgreSQL 8.4中安装其他模块多维数据集

时间:2012-09-25 18:39:56

标签: postgresql installation postgresql-8.4

我试图将PostgreSQL与“Seven Weeks七个数据库”一书一起使用。我在Ubuntu 10.04服务器上使用PostgreSQL 8.4.1。

第一项任务是创建一个名为“book”的数据库,并检查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

那么,我做错了什么?

2 个答案:

答案 0 :(得分:13)

您只将扩展安装到postgres数据库(名为“postgres”的默认系统数据库) - 这可能是您想要的。您需要将扩展​​安装到您的数据库 - 每个数据库使用它一次。

或者您可以将其安装到模板数据库(默认情况下为template1,但任何数据库可用作模板),以便创建的每个新数据库都以安装。

在PostgreSQL 8.4或更早版本中,您需要在shell中运行

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

其中dbname是您的实际目标数据库的名称。或者使用你问题中的等效行。
More info for PostgreSQL 8.4 in the manual here.

自PostgreSQL 9.1以来,这已经进一步简化,您可以在数据库会话中运行

CREATE extension cube

More in the manual here

答案 1 :(得分:7)

9.1的完整命令是:

   psql -d dbname  
   CREATE EXTENSION cube;  
   \q

其中dbname是要添加扩展名的数据库的名称。 请注意,最后一个命令是退出的反冲q。并且不要忘记第二个分号结束时的分号。