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

Jos*_*mez 14 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;"
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我得到以下输出:

ERROR:  type "cube" does not exist
LINE 1: SELECT '1'::cube;
Run Code Online (Sandbox Code Playgroud)

我已经使用以下命令安装了多维数据集包:

$ sudo -u postgres psql postgres < /usr/share/postgresql/8.4/contrib/cube.sql
Run Code Online (Sandbox Code Playgroud)

我尝试重启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
Run Code Online (Sandbox Code Playgroud)

那么,我做错了什么?

Erw*_*ter 13

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

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

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

psql -d dbname -f SHAREDIR/contrib/cube.sql
Run Code Online (Sandbox Code Playgroud)

dbname您的实际目标数据库的名称在哪里.或者使用您问题中的等效行.
有关PostgreSQL 8.4的更多信息,请参见手册.

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

CREATE extension cube
Run Code Online (Sandbox Code Playgroud)

更多在手册中.


小智 8

9.1的完整命令是:

   psql -d dbname  
   CREATE EXTENSION cube;  
   \q
Run Code Online (Sandbox Code Playgroud)

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