[pgsql-jp: 26957] Re: TABLEを削除できない場合がある

Mashiki mashiki @ yanah.com
2002年 8月 8日 (木) 22:48:38 JST


 Mashikiです。

>エラーメッセージの件ですが、
>部内管理者の方に調べてもらいまして
>どういう方法で見つけたのかわかりませんが、
>残骸を削除してくれたようです。
>(私は管理者ではありませんので権限がない)
>
>正確なメッセージということですが、
>今回は社内の管理がやってくれてしまいました。
>
>インデックスを設定した場合は、テーブルを削除
>する前に、インデックスを削除すれば、よいようです。
>
><引用を復活>
>> >正確にエラーメッセージを出して頂けた方がアドバイスしやすいと思いますが。
></引用を復活>
>
>の件ですが、次回からは、気をつけたいと思います。
>(いままで、ORACLEなどでDBをやっていましたが、
> ツールを使っていて、postgreSQLでは
>  ORACLEのようにはツールがそろっていないようですので
>  ちょっと、めんくらっています)


Oracleのデータベースの運用でよくやる事ですが、テーブル
定義に変更を加える時や、テーブルのデータを削除する場合、
「テーブルをリネームして、同じ名前でテーブルをCreateし
その後、必要なデータをコピーする」なんて方法があります。

アプリケーションが使えなくなる時間を短くでき、簡単にもとの
状態に戻せる方法なのですが、postgresでこの運用を行おうと
した場合、テーブルのリネームではプライマリーインデックスの
リネームが自動的に行われず、同じ名前のテーブルを作成する
ときエラーとなります。

mashiki=# create table AA (a varchar primary key);

NOTICE:  CREATE TABLE / PRIMARY KEY will create
         implicit index 'aa_pkey' for table 'aa'
CREATE

mashiki=# alter table aa rename to BB;

ALTER

mashiki=# create table AA (a varchar primary key);

NOTICE:  CREATE TABLE / PRIMARY KEY will create
         implicit index 'aa_pkey' for table 'aa'
ERROR:  index named "aa_pkey" already exists

mashiki=#


いままでOracle人だったということでこのストーリーで
問題が起きたのでは?とまっさきに考えてしまいます。



pgsql-jp メーリングリストの案内