忍者ブログ
Admin§Write

ぷろぐらみんぐ徒然

文系4大卒がなぜか職業ぷろぐらまになって早10年。 とっくに三十路は過ぎた。 いつまでも派遣プログラマだと死亡フラグが立つのでそれよりきり前に脱出成功。今後の事はまだ良くわからん。 ここのところ愛してやまないバンドはFuzzy Control。 興味を持ってもらえたらうれしいです。 この欄だとタグが使えないみたいなのでURLも。 http://www.fuzzycontrol.jp/

HOME ≫ Category 「PostgreSQL」 ≫ [1] [2]

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


[PostgreSQL] SQLエラー発生後の挙動

以前、
http://heppokopg.blog.shinobi.jp/Entry/20/
にて、「SQLエラーがあった際にCommit or Rollbackしないと処理が続行できないのはJDBCドライバのせい」
と書いてしまいましたが大きな過ちでした。
JDBCに限らず普通にコマンドラインツール(psql)からのSQL実行でも同じことが起こるわけで、ドライバ依存
の問題ではないですねぇ。(というか、psqlがオートコミットモードがデフォルトなのに気づいたのが最近(汗))
Oracleではそのまま処理は継続して行えるけど、他のDB(UDB,SQLServer,mysqlとか)はどう判断するのだろうか?

とりあえず手元にある環境のSQLServer2005は中間のSQLでエラーが発生しても後続のSQLは正常に
実行されるみたいですねぇ・・・

動きとしてはどっちが正しいのだろうか?
PR

[PostgreSQL] SQLエラーコードが設定されない

PostgreSQLのJDBCドライバはSQLExceptionがthrowされた際にSQLエラーコードを設定してくれないらしい。
そもそもSQLの実行結果に結果コードを返すようになったのが7系からで今はDBとしてはエラーコードを返す
もののSQLException発生時にそのエラーコードを設定してくれれば良いのにね。
一応Messageにエラーメッセージそのものは設定されるのでエラーメッセージの内容を拾って処理を切り分けて
あげるしか方法が無いかも。
つーかドライバやDBのバージョンによってメッセージは変わるものなんじゃないか?OSとか言語でも。
とりあえずSQLException(正確にはPSQLException)が発生した場合にPSQLExceptionを継承した例外クラス
のインスタンスを作って再throwさせてそのサブクラスの中でエラー判定をしようかと思うが、Exceptionの中で
リソースを読んで、エラーを切り分けて、とかする事になりそう・・・
あんま実装したくないなぁ・・・

[PostgreSQL] ERROR: current transaction is aborted, commands ignored until end of transaction blockって言われた

今回も挙動の違いなのですが、PostgreSQLのJDBCドライバって一度SQLExceptionがthrowされるとcommit/rollbackしないと後続処理ができないのね。


try{
  Connection connection = getConnection();
  Statement statement = connection.createStatement();
  // キー重複エラー
  statement.executeQuery("INSERT INTO HAGE (KEY) VALUES (1)");
}catch(SQLException e){
    // リカバリ実行
  statement.executeQuery("DELETE FROM HAGE WHERE KEY = 1"); 
  // ↑この行でエラー
}
リカバリ実行をする前にrollback、commitをしてあげれば更にSQLExceptionがthrowされる事はなくなるようですが…今まで例外が発生したらcatch節の中で更に処理を…っての結構やってきてたけど本来それは推奨されない処理なんじゃないかと思えてきた。
ちなみに上記Javaコードは適当に雰囲気で書いただけなので間違ってても気にしないでください。

[PostgreSQL] 表の切り捨て

PostgreSQLってTRUNCATE TABLE してもROLLBACK出来てしまうのね…
Oracleはロールバック不能だった気がする…
DELETE FROMとの違いはなんだろう?CASCADEオプションを指定できるかどうかかなぁ。
ロールバックできるとなるとパフォーマンスは大差なさそうだが…
今度調べてみるかぁ。


[PostgreSQL] 階層問い合わせ

PostgreSQLの階層問い合わせ(CONNECT BY)って標準だと使えないのね…
貢献モジュール入れないとだめかぁ。

データモデル的に階層構造が部分的に存在するので使いたいのだが今回は断念。


|PageTop| 次のページ ≫

※ 忍者ブログ ※ [PR]
 ※
Writer 【へっぽこPG】  Design by NUI.T  Powered by NinjaBlog