sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQL \ lo_importと、結果のOIDをUPDATEコマンドに取り込む方法は?

    ファイルがローカルマシンにあり、BLOBをリモートサーバーにインポートする場合は、次の2つのオプションがあります。

    1)ファイルをサーバーに転送し、サーバー側関数を使用します

    UPDATE species
    SET    speciesimages = lo_import('/path/to/server-local/file/zzz4.jpg')
    WHERE  species = 'ACAAC04';
    

    2)psqlメタを使用します-コマンド あなたがそれを持っているように。

    ただし、psqlメタコマンドとSQLコマンドを混在させることはできません。それは不可能です。
    psql変数:LASTOIDを使用してください。 UPDATE\lo_importの直後に起動するコマンド 同じpsqlセッションのメタコマンド:

    UPDATE species
    SET    speciesimages = :LASTOID
    WHERE  species = 'ACAAC04';
    

    それをスクリプト化するには(Linuxで動作しますが、私はWindowsシェルスクリプトに精通していません):

    echo "\lo_import '/path/to/my/file/zzz4.jpg' \\\\ UPDATE species SET speciesimages = :LASTOID WHERE  species = 'ACAAC04';" | \
    psql -h 192.168.1.12 -p 5432 -d myDB -U my_admin
    
    • \\ セパレータメタコマンドです。 \を2倍にする必要があります 、""で 文字列。シェルが1つのレイヤーを解釈するためです。
    • \ 改行の前は、Linuxシェルの行の継続です。

    代替構文(Linuxで再度テスト済み):

    psql -h 192.168.1.12 -p 5432 -d myDB -U my_admin << EOF
    \lo_import '/path/to/my/file/zzz4.jpg'
    UPDATE species
    SET    speciesimages = :LASTOID
    WHERE  species = 'ACAAC04';
    EOF
    


    1. 本棚を持つ本、著者、出版社、ユーザーのためのデータベーススキーマ

    2. WHEREステートメントでのエイリアス列の使用

    3. コントローラーとモデルを使用したLaravel5.1消費石鹸wsdlサービス

    4. dbms_schedulerジョブの作成ジョブが実行されていません