[pgsql-jp: 41168] Re: ご教授お願いします
takart32 @ yahoo.co.jp
takart32 @ yahoo.co.jp
2012年 8月 7日 (火) 15:58:22 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 メーリングリストの案内