やりたいこと
postgreSQLのDBに対し、psqlコマンドで複数の外部ファイルに定義されたSQLを読み込んで実行していき、エラーになったファイルがあった時に実行を停止させ、エラーの内容はテキストファイルで出力させたい
(環境:Windows10)
試したこと
下記のようにコマンドプロンプトからpsqlでDBに接続し、トランザクションを発行します
↓ \i で insert_N.sqlを読み込み下記のように連続で実行していきます。
(insert_N.sqlにはINSERT文が多数書かれている想定)
psql
1\i insert_1.sql 2\i insert_2.sql 3\i insert_3.sql 4 : 5 :
↓そうすると画面にinsert_N.sqlの実行結果が出力されます
INSERT 0 1 INSERT 0 1 INSERT 0 1 INSERT 0 1 INSERT 0 1 :
ここで、エラーが起きた時に、今はコマンドプロンプトの画面をスクロールして
どのinsert_N.sqlでエラーが起きていたのか探してエラーに対処する……
という事をしていますがスクロールで探すのは手間なのでもっと効率化したいというのが実現したいことです
下記のように-bオプション(失敗したSQLコマンドを標準エラー出力に出力します)を使ったり、1>
と2>
を用いて標準エラー出力のリダイレクトでテキストをはこうとしましたが、これを実行してDBのパスワードを入力すると応答が返ってこなくなってしまいます
$ psql -h localhost -p 5432 -U postgres -d dvdrental -b 1> info.txt 2> error.txt
下記の1.と2.を必須条件として実現したいです。3.は「できれば達成したい」レベルなので3はできなくても構いません。
- エラー出力をリダイレクトしてテキストに吐くようにする
- トランザクションを発行して、エラーが発生したときにはInsert_1.sql~Insert_N.sqlを実行する前の状態にロールバックしたい
- insert_N.sqlを全ファイル実行するのではなく、エラーになったファイルがあったら以後のファイルは処理しないようにしたい(できればしたい事)
お手数ですが、psqlコマンド、postgreSQLに詳しい方の知見をお待ちしております。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/27 06:56