2012-01-11 18 views
0

私のアプリケーションは、システムに接続されたデバイスからバイト配列としてJPGイメージを受け取ります。これらは、PostgreSQL 9.1データベースのLarge Objectsテーブルに書き込まれる必要があります。私は現在、データベースにアクセスするためにPostgreSQLライブラリのC#とDevart docConnectを使用していますが、すべて正常に動作しています。問題は、データベースに自分のデータを書き込むことです(2つのテーブルを更新し、大きなオブジェクトテーブルにイメージバイトを書き込む必要があります)。私は、自分のコードが物事をスピードアップするためにデータベースにする旅行の回数を減らしたいと思っています。PostgreSQLのラージオブジェクトとストアドファンクション

私は2つのテーブルに対してUPSERTを実行するストアドファンクションを作成しました。私は、バイト配列パラメータとして格納された関数に画像のバイトを渡し、格納された関数は大きなオブジェクトのテーブルに画像のバイトを書き込ませます。これは可能ですか? PostgreSQL 9.1マニュアルのサーバー側の関数に関するドキュメントは不毛であり、どの関数を呼び出して&というデータを書き込むのかわかりません。

感謝のOracleやMicrosoftとは異なり

トニー

+0

は '使用していないだろうされるフラグべきグリース

を投稿するリンゴのスペルチェック変更postgresのため

select deleteme(8) 

余分なポイントを使用することができますbytea'ではなく、もっと簡単にできますか? –

+0

私のコメントをTwelfthの答えに見てください。 –

+0

私はまだそれを得ることはありません。あなたが既に* byteaを持っているなら、なぜLargeObjectが必要なのでしょうか? –

答えて

1

、Postgresはそれはのように非常に柔軟な機能だけ(関数についてはpostgresマニュアルで調べると...あり...関数やストアドプロシージャを区別しません。まあ、あなたはCやJavaライブラリや他の楽しいものを呼び出すことができます)。そこで、いくつかのパラメータを受け入れ、select文を関数(arguement1、arg2、etc ...)として呼び出す関数を(おそらくPLPGSQLで)作成します。テンプレートたい場合は、ここでは一例です:それの言語とシンタックスで

CREATE OR REPLACE FUNCTION deleteme 
(deleteid integer) 
RETURNS integer AS 
$BODY$ 
BEGIN 
delete from mytable_attrib where id = $1; 
delete from mytable where id = $1; 
return 0; 
END; 
$BODY$ 
LANGUAGE plpgsql VOLATILE; 

少し違う、あなたは...変数に例えば、列名と同じ名前を命名していないために使用されるかもしれませんが...または動的SQLに移行してplpgsqlを使用して変数に文を作成し、その変数をsqlとして実行する準備をすることができます。

execの構文ではなく、oracleやMSが望む関数のように実行します。 IDの行8を削除するには、私は今、私は私の知識が8.4のためではありません9.1

+0

私はそれを認識しています。私の謝罪は具体的ではないが、私の質問はPostgresに組み込まれた大きなオブジェクト関数(​​ "lo_"で始まる関数)と関係があります。関数にbyteaパラメータを渡したいと思います。私はラージオブジェクトテーブルにbyteaを書き込むために "lo_"関数が呼び出されるかどうかはわかりません。私が知っている関数はパラメータとしてファイル名を取ります。私はファイルシステムにデータを書き込んでラージオブジェクトテーブルに入れるのではありません。 –

+0

ああ、申し訳ありません...私はここであなたの意図を少し離れていました。私は実際に作成した任意のDB内で大きなオブジェクトを使用することを避けました。だから私はここであなたのための直接の経験はありません...ごめんなさい。私はあなたがcontribファイルをインストールしたと仮定します。 http://www.postgresql.org/docs/9.1/static/lo-interfaces.html#LO-WRITEは私がそこからあなたを見せることができる最高です – Twelfth

関連する問題