15

我正在尝试将 PostgreSQL 与“七周内的七个数据库”一书一起使用。我在 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

那么,我做错了什么?

4

2 回答 2

14

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

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

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

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

dbname您的实际目标数据库的名称在哪里。或使用您在问题中的等效行。
此处的手册中有关 PostgreSQL 8.4 的更多信息。

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

CREATE extension cube

更多的手册在这里

于 2012-09-26T21:16:40.157 回答
8

9.1 的完整命令是:

   psql -d dbname  
   CREATE EXTENSION cube;  
   \q

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

于 2013-07-09T20:48:09.603 回答