2012-02-29 7 views
0

私はいくつかのOIDフィールドを持つPostgreSQLデータベースを持っています。これらのフィールドへのデータは、lo_importコマンドを使用して挿入されています。HTTPサーバのイメージに別のイメージDBサーバからアクセスする

ただし、データベースをバックアップして別のサーバーに復元することはできません。私がそうしようとすると、すべてのテキストエントリが復元され、OIDフィールドにOID値がありますが、lo_exportを実行すると、ファイルが存在しないようなエラーが表示されます。

私はここで間違っていますか?


[編集:] [OK]を、私は、DBのバックアップが実際に動作することを発見したが、私は別の独自の問題を抱えています。私のDBサーバーと私のHTTPサーバーは異なるマシンにあります。だから今私の質問は、イメージサーバーからHTTPサーバーのイメージを取得する方法です。

+0

異なる言語/ドライバはを通じてデータベース接続にラージオブジェクトの内容を取得するための異なる方法を提供しますネットワーク。 libpq(基本的なCのpostgresqlクライアントライブラリ)は、lo_open、lo_read、lo_closeという名前の関数を持っています...他の言語は、これらの関数の上に構築された同様の関数を公開しています。アプリケーションの正確な答えは、使用する言語/ PGドライバによって異なります。 –

+0

私はサーバー側のスクリプト言語としてPHPを使用しています。今のところ、私は両方のサーバーを別々のサーバーと考えて解決策を考え出すことができました。 –

答えて

0

は、HTTP接続にPostgreSQLのラージオブジェクトから画像を提供する方法を示すPHPコードスニペットである:

$db=pg_connect("dbname=mydb host=dbserver"); 
    pg_query("BEGIN"); 
    $p = pg_query("SELECT object_id, image_type FROM contents WHERE id=$some_id"); 
    list($oid,$type) = pg_fetch_row($p); 
    $h=pg_lo_open($db, $oid, "r"); 
    if ($h) { 
    header("Content-Type: $type"); 
    pg_lo_read_all($h); 
    pg_lo_close($h); 
    } 
    pg_query("END"); 
+0

うわー、これはいいよね。私はこれを試して戻ってくるだろう。とにかく、ありがとう! –

0

ごめんなさいIo_importは何ですか? Postgresqlデータベースのダンプは、pg_dumpを使って行い、pg_restoreまたはpsqlコマンドを使用してリストアします。ここ

+0

OID型のimageという列があります。この列に画像を挿入するには、lo_import()関数を使用します。 –