15

「SevenDatabasesinSevenWeeks」の本でPostgreSQLを使おうとしています。Ubuntu10.04サーバーでPostgreSQL8.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を再起動しようとしましたが、問題は解決しません。パッケージインポートを2回実行しようとすると、次のメッセージが表示されました。これは、次のことを明示的に示してい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」という名前のデフォルトのシステムデータベース)にインストールしただけです。これはおそらくあなたが望むものではありません。拡張機能をデータベースにインストールする必要があります-それを使用するデータベースごとに1回。

または、テンプレートデータベースにインストールして(template1デフォルトでは、任意のデータベースをテンプレートとして使用できます)、作成されたすべての新しいデータベースが機能がプリインストールされた状態で開始されるようにすることができます。

PostgreSQL 8.4以前では、シェルで実行する必要があります。

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 は、拡張機能を追加するデータベースの名前です。最後のコマンドは、quit のバックラッシュ q であることに注意してください。2 つ目の末尾のセミコロンを忘れないでください。

于 2013-07-09T20:48:09.603 に答える