初めて質問をします。よろしくお願いします。
環境はLinaxです。
テキストファイルにDROP TABLEとCREATE TABLEの命令を書いておき、
それをpsql \i test.txt
で読み込み、テーブルを作成したいのですが、
下記のテキストの内容だと、テーブルが存在しない場合、エラーが発生します。
テーブルが存在すれば、DROPしてCREATE、
テーブルが存在しなければ、CREATEのみ
という動作をさせたいのですが、どのようにしたら良いでしょうか?
よろしくお願い致します。
テキストファイルtest.txt
---------------------
DROP TABLE testID;
CREATE TABLE testID
(
id TEXT,
name TEXT,
);
---------------------
No.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文に組み込むんでしょうか?
(見当違いならごめんなさい)
何度も申し訳ありませんが、よろしくお教え下さい。お願いします。
No.2
- 回答日時:
これでできるのではないでしょうか...
psql -f test.txt
何もない状態(初回)で実行すると
「エラーメッセージ(テーブルが無い)」のあとCREATEと表示されできるはずです。
(CREATEエラーの後続行します)
再度実行すると
「DROP CREATE」と表示されます。
ちなみに質問内容にある「test.txt 」ですが
name TEXT,
の最後のカンマは不要です。(あるとエラーになりCREATEできません)
この回答への補足
回答&ご指摘ありがとうございます~
皆様へ訂正させて頂きます。misschoisさんのご指摘どおり
name TEXT,→name TEXT
です。申し訳ありませんでした。
すみません。
私の質問が言葉足らずで皆さんにご迷惑をおかけしております。
エラーメッセージ(テーブルが存在しない)を出したくないのです。
自分でも調べたのですが、力量不足のためわかりませんでした。
よろしくお願いします。
No.1
- 回答日時:
エラーが出ても、最終的に同じテーブルができている状態で終わるので問題ないのでは?
エラー文が出てしまうことによる弊害があるのでしょうか?
この回答への補足
現在、テーブルを作成する補助ツールを作成しています。
私がそのツールを使う立場なら、いきなりエラーが出たら驚いてしまうと思うので、SQLServerのIf~elseのように、テーブルが存在したら、DropしてからCreateするという機能を実現したいのです。
どうかよろしくお願いします。
初めて教えてgoo!に投稿して初めてご回答いただけてすっご嬉しかったです。
投稿が勉強不足な回答でムシされたらどうしようって思っていたので、
早速のご回答に感銘を受けました。
私も勉強してすばやく回答できるようになりたいと思います。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- MySQL MySQLのテーブル作成で 自信がありません。 2 2022/08/28 05:35
- MySQL テーブル作成時のカラムについて 2 2022/08/27 21:48
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- MySQL SHOW CREATE TABLE posts;これって何ですか? 3 2022/08/28 22:57
- MySQL MYSQL エラー 2 2022/10/18 11:37
- MySQL MySQLのテーブル作成でハイフン - は使用できないのでしょうか? 2 2022/10/21 16:50
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL PHP 画像のアップロード Qiita 2 2022/11/28 04:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SELECT 文の NULL列は?
-
SQLでUPSERTを一度に複数行やる...
-
SQLにて指定日付より前、かつ最...
-
テーブルに存在しない列をselec...
-
単純なselectが遅くなるのです...
-
javaでデータベース上のテーブ...
-
複数テーブルにまたがるmax
-
PostgreSQLの断片化の状況を確...
-
DISTINCTとGROUP BYの違い
-
PostgreSQL レコードからアイテ...
-
重複を許すキーの構文がわかり...
-
トリガープロシージャのNEW変数...
-
バキューム処理の実行時間の目安
-
2つのテーブルで引き算 postgres
-
テーブルにcsvファイルをインポ...
-
Postgresqlで配列に日付を格納...
-
postgres FILLFACTOR 確認方法
-
DBFluteについて質問です。 環...
-
Pythonで2つのデータ(キー無し...
-
フィールドの入れ替えはできま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT 文の NULL列は?
-
SQLにて指定日付より前、かつ最...
-
単純なselectが遅くなるのです...
-
SQLでUPSERTを一度に複数行やる...
-
PostgreSQLの断片化の状況を確...
-
テーブルに存在しない列をselec...
-
2つのテーブルで引き算 postgres
-
重複を許すキーの構文がわかり...
-
javaでデータベース上のテーブ...
-
Postgresのデータ領域の拡張に...
-
postgreSQL カラムの全ての値を...
-
PostgreSQL レコードからアイテ...
-
Postgresqlのレポート機能について
-
Pythonで2つのデータ(キー無し...
-
reindex と update のデッドロック
-
MS Access から PostgreSQL へ...
-
最新レコードを抽出し外部結合...
-
UPDATE文の更新順序について
-
VIEWのCOPYってできないんですか?
-
DBFluteについて質問です。 環...
おすすめ情報