[pgsql-jp: 41174] Re: ご教授お願いします
takart32 @ yahoo.co.jp
takart32 @ yahoo.co.jp
2012年 8月 7日 (火) 19:59:52 JST
後藤さん
ご回答ありがとうございます。
> 代替関数を用意するのと、元のプログラムをすべて書き換えるのと
> どちらが手間か? という事になるでしょうけど。
⇒修正に対するテストのインパクトを考えると代替関数を用意してあげる
方が良いのかなと思いました。
サイト連携もありがとうございます。
--- On Tue, 2012/8/7, Kazumasa Gotoh <kgotoh @ cic-kk.co.jp> wrote:
>
> 後藤と言います。
>
> この辺りにはまったく詳しくないのですが、ちょっと検索すると
> こんなのとかが出てきます。
>
> http://miroslav.suchy.cz/spacewalk/gitstat/commit-detail.php?commit=ad648496420396db183fa6433628ab17f8d9fd0b
>
> http://www.redhat.com/archives/spacewalk-devel/2009-February/001490.html
>
> リンク先の中身をロクにチェックしてないので適当な紹介になって
> しまいますが、Migration の場合には「無ければ(自分で)作ってしまう」
> というのも、ひとつの選択肢だと思います。
>
> 代替関数を用意するのと、元のプログラムをすべて書き換えるのと
> どちらが手間か? という事になるでしょうけど。
>
>
> From: <takart32 @ yahoo.co.jp>
> Date: Tue, 7 Aug 2012 15:58:22 +0900 (JST)
>
> > さいとうさん
> >
> > こんにちは。回答くださりありがとうございます。
> >
> > やはり初期化を行うには『''』を格納する方法しかないのですね。
> >
> > 現行のJavaロジックが以下の処理方式で作られているので、empty_blob
> > の代替関数があれば、プログラムをほぼ修正せずにいけると思ったのですが残念です。
> >
> > (1)新規レコードをinsertする。insert時にBLOBカラムは、empty_blob()関数で初期化する。
> > (2)insertした新規レコードを、for update句を使用して、ロックを取得してselectする。
> > (3)selectしたBLOBカラムのロケータから、BinaryOutputStreamを取得する。
> > (4)取得したBLOBオブジェクトのOutputStreamをZip形式でinsertするので、ZipOutputStreamを作成。
> > (5)ZipOutputStreamをObjectOutputStreamでラップする。
> > (6)writeObjectでDBに書き込みを行う。
> >
> > どういった処理方式でいけるかこれから検討してみます。
> >
> >
> >
> >
> > --- On Tue, 2012/8/7, take <saitoh_takeshi @ ics.co.jp> wrote:
> >
> >> さいとうです。
> >>
> >> insert into ... (..., bin) values (..., ''); でどうでしょうか。
> >>
> >> わたしのところではJavaアプリケーションで、こうしています。
> >>
> >>
> >> $ psql
> >>
> >> # create table hoge2(id text, bin bytea);
> >> CREATE TABLE
> >>
> >> # insert into hoge2 values ('aa', '202122');
> >> INSERT 0 1
> >>
> >> # select id, encode(bin, 'hex') from hoge2;
> >> id | encode
> >> ----+--------------
> >> aa | 323032313232
> >> (1 row)
> >>
> >> # insert into hoge2 values ('aa', '');
> >> INSERT 0 1
> >> # select id, encode(bin, 'hex') from hoge2;
> >> id | encode
> >> ----+--------------
> >> aa | 323032313232
> >> aa |
> >> (2 rows)
> >>
> >> # insert into hoge2 values ('aa', 'ABC');
> >> INSERT 0 1
> >> # select id, encode(bin, 'hex') from hoge2;
> >> id | encode
> >> ----+--------------
> >> aa | 323032313232
> >> aa |
> >> aa | 414243
> >> (3 rows)
> >>
> >> # update hoge2 set bin = '';
> >> UPDATE 3
> >> # select id, encode(bin, 'hex') from hoge2;
> >> id | encode
> >> ----+--------
> >> aa |
> >> aa |
> >> aa |
> >> (3 rows)
> >>
> >>
> >>
> >> At Tue, 7 Aug 2012 10:34:36 +0900 (JST),
> >> <takart32 @ yahoo.co.jp> wrote:
> >> >
> >> > こんにちは 高橋といいます。
> >> >
> >> > postgresのバイナリデータについて質問があります。
> >> >
> >> > Oracleでいうempty_blob関数のようなバイナリデータを
> >> > 初期化する関数はありますでしょうか?
> >> > データ型はBytea型を使用しています。
> >> >
> >> > 補足
> >> > Oracle→PPASへの移行を実施中。Javaアプリの中でINSERTのSQL文を発行しており、
> >> > その中でBlobデータの初期化(empty_blob)を行っている。
> >> > データの書き込みはストリームを使用して行っている。
> >> > 現行ロジックから、極力修正を行わない方針でいきたいので、empty_blobと同様
> >> > の関数があるのであれば使用したい。
> >> >
> >> >
> >> > 色々調べたのですが、それらしい物が見つからずご教授をよろしくお願いします。
> >> >
> >>
>
pgsql-jp メーリングリストの案内