こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PostgresSQLの条件分岐

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

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

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

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

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

投稿日時 - 2002-08-29 12:50:27

QNo.346243

すぐに回答ほしいです

質問者が選んだベストアンサー

質問の真意を理解せず回答してしまいました。ORCA_Hさん、すいません。

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

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

投稿日時 - 2002-08-29 16:43:01

補足

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

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

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

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

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

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

投稿日時 - 2002-08-29 17:07:51

お礼

何度もすみません。

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

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

投稿日時 - 2002-08-29 18:07:28

このQ&Aは役に立ちましたか?

8人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

これでできるのではないでしょうか...
psql -f test.txt

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

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

投稿日時 - 2002-08-29 13:58:34

補足

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

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

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

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

よろしくお願いします。

投稿日時 - 2002-08-29 14:17:55

ANo.1

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

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

投稿日時 - 2002-08-29 13:41:49

補足

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

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

投稿日時 - 2002-08-29 14:02:27

お礼

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

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

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

投稿日時 - 2002-08-29 18:10:13

あなたにオススメの質問