プロが教えるわが家の防犯対策術!

初めて質問をします。よろしくお願いします。
環境はLinaxです。
テキストファイルにDROP TABLEとCREATE TABLEの命令を書いておき、
それをpsql \i test.txt
で読み込み、テーブルを作成したいのですが、
下記のテキストの内容だと、テーブルが存在しない場合、エラーが発生します。

テーブルが存在すれば、DROPしてCREATE、
テーブルが存在しなければ、CREATEのみ

という動作をさせたいのですが、どのようにしたら良いでしょうか?

よろしくお願い致します。

テキストファイルtest.txt
---------------------
DROP TABLE testID;
CREATE TABLE testID
(
id TEXT,
name TEXT,
);
---------------------

A 回答 (3件)

質問の真意を理解せず回答してしまいました。

ORCA_Hさん、すいません。

ツールはシェルで作成するのでしょうか?
以下の方法でテーブル有無は調べることは可能ですので、
シェル内でDROPするかどうか制御してはどうでしょうか。
・pg_classテーブルのrelnameカラムが"test"のレコードがあるか
・\dでテーブルtestが表示されるか

単純にメッセージ(エラー/正常問わず)出さないというのであれば
psql -f test.txt > /dev/null 2>&1
ということになりますが...一番簡単ですが乱暴ですね...

この回答への補足

レスありがとうございます~

>ツールはシェルで作成するのでしょうか?

そうです。現状の動きは端末でDrop&Create tableを書いたテキストファイルを作りサーバーのpsqlのカレントに置いてます。
(telnetでLinaxサーバを操作)

すみません私のスキル不足で
>・pg_classテーブルのrelnameカラムが"test"のレコードがあるか
>・\dでテーブルtestが表示されるか
が読み砕けません・・・

\dはテーブルの一覧を表示ですよね?
それをSQL文に組み込むんでしょうか?
(見当違いならごめんなさい)

何度も申し訳ありませんが、よろしくお教え下さい。お願いします。

補足日時:2002/08/29 17:07
    • good
    • 0
この回答へのお礼

何度もすみません。

わかりました!
select文を発行するってコトですね。

解決です~ありがとうございました。

お礼日時:2002/08/29 18:07

これでできるのではないでしょうか...


psql -f test.txt

何もない状態(初回)で実行すると
「エラーメッセージ(テーブルが無い)」のあとCREATEと表示されできるはずです。
(CREATEエラーの後続行します)
再度実行すると
「DROP CREATE」と表示されます。

ちなみに質問内容にある「test.txt 」ですが
name TEXT,
の最後のカンマは不要です。(あるとエラーになりCREATEできません)

この回答への補足

回答&ご指摘ありがとうございます~

皆様へ訂正させて頂きます。misschoisさんのご指摘どおり
name TEXT,→name TEXT
です。申し訳ありませんでした。

すみません。
私の質問が言葉足らずで皆さんにご迷惑をおかけしております。
エラーメッセージ(テーブルが存在しない)を出したくないのです。

自分でも調べたのですが、力量不足のためわかりませんでした。

よろしくお願いします。

補足日時:2002/08/29 14:17
    • good
    • 0

エラーが出ても、最終的に同じテーブルができている状態で終わるので問題ないのでは?



エラー文が出てしまうことによる弊害があるのでしょうか?

この回答への補足

現在、テーブルを作成する補助ツールを作成しています。
私がそのツールを使う立場なら、いきなりエラーが出たら驚いてしまうと思うので、SQLServerのIf~elseのように、テーブルが存在したら、DropしてからCreateするという機能を実現したいのです。

どうかよろしくお願いします。

補足日時:2002/08/29 14:02
    • good
    • 0
この回答へのお礼

初めて教えてgoo!に投稿して初めてご回答いただけてすっご嬉しかったです。
投稿が勉強不足な回答でムシされたらどうしようって思っていたので、
早速のご回答に感銘を受けました。

私も勉強してすばやく回答できるようになりたいと思います。

ご回答ありがとうございました。

お礼日時:2002/08/29 18:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!