質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.53%

DBに画像を入れたい。

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,609

NextSt

score 11

●環境
OS:Windows Server2012 R2
SQL:PostgreSQL(9.5.11)

・DB名:IMG_TEST
・テーブル名:IMG_TEST_TA
・テーブル構造
SQ   varchar(5)
NAME  varchar(10)
IMAGE   bytea

●実施内容
以上の環境下で、下記のデータをCSVで流し込んでおります。
(IMAGEは空です。)
|SQ|NAME|IMAGE|
|1 | A  |     |
|2 | B  |     |

この回答を参考に、

UPDATE IMG_TEST_TA
SET IMAGE = (SELECT bytea_import('C:\Users\(長いので省略)\icon.png'))
WHERE SQ = '1';

と入力し実行した所、

ERROR: function bytea_import(unknown) does not exist
行 2: SET image = (SELECT bytea_import('C:\Users\...
^
とエラーが出ていました。

画像ファイルをアップロードするにはどこを修正すればよろしいでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

回答 4

checkベストアンサー

+1

bytea_importはpostgreSQLにデフォルトである関数ではありません。
>function bytea_import(unknown) does not exist
これはそんな関数ないよ、と言われています。

対応としては、
stackexchange(英語サイト)
のベストアンサーが分かりやすいかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/03 11:24

    ついさっきようやく、INSERT INTO~~の書き方を調べ、
    アップロードができるようになりました。
    (別の問題ができてしまいましたが…。)

    ただ、なんでbytea_importが利用できないのか不明で、
    そっちの原因究明にあたるか、先に進むか悩んでいた所でした。

    原因がわかりすっきりしました、ありがとうございました。

    キャンセル

  • 2018/08/03 11:33

    一通り調べてみると直で登録したいのならJDBCでのデータ登録が一般的みたいですね。
    基本bytea型にはByte文字列に変換して登録しなければいけないので、当たり前といえば当たり前ですが。

    僕はJavaで変換してから登録ということしかしたことがなかったので、勉強になりました。

    キャンセル

0

OS:Windows Server2012 R2

ですので

C:\Users\~~~~\icon.png

はデータベース・サーバーのパスでしょうか?
また、フルパス上に空白や全角文字がない方がトラブルが少ないかもです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/02 15:58

    リンク修正の点ありがとうございました。

    また~~~~の部分はフォルダ名等が入っておりますが、
    フォルダのプロパティよりコピーペーストしたものなので、
    正しいものを入力しています。
    (アクセスできるかの確認済)
    空白・全角文字については入っておりません。

    念のため当該箇所の質問文を一部修正致しました。

    キャンセル

  • 2018/08/02 16:02

    すいません追記です。
    DBサーバのデスクトップ上にフォルダを作成し、そこに複数の画像ファイルを保存しております。
    その中の1つ、icon.pngを指定しております。
    →C:\Users\~~~~\icon.png

    キャンセル

0

デスクトップはダメです。半角カタカナや空白が入ったかも?
C:\image\
みたいなフォルダを用意して画像を置いては?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/02 16:22

    C:\image\icon.pngに配置してみましたが、
    同様のエラーが表示されました。
    エラーの下に、
    HINT: No function matches the given name and argument types.
    You might need to add explicit type casts.

    と表示されており、翻訳にかけると、指定された名前と引数の方に一致する関数がないとなりますが、
    上記環境的に何か間違っているのでしょうか?

    エラー内容の下にあるどこが間違っているかを示す^の印ですが、 
    行 2: SET image = (SELECT bytea_import('C:\Users\...  のbの文字の下に表示されております。
    何度か調整を試みましたがうまく調整できませんでした。

    キャンセル

  • 2018/08/02 16:32

    画像をCドライブ直下に置いてSQLも変更してみては?

    キャンセル

  • 2018/08/02 16:43

    C直下にpngファイルを置き、
    C:\icon.pngに変更してみましたが同様のエラーが表示されます。

    キャンセル

0

///2018.08.03 13:58修正追記///
●原因
bytea_import関数は、デフォルトで利用できる関数ではない。

●解決方法
・前提条件
>C:\Program Files\PostgreSQL\9.x\data に、バイナリデータを配置しておく。

PostgreSQL
>INSERT INTO table_name (column_name)
>SELECT pg_read_binary_file('file_name');

ーWHEREでの指定がなぜかできなかったので。UPDATEで書きなおした所無事入れられました。

UPDATE table_name
SET column_name = pg_read_binary_file('file_name')
WHERE column_name2 = '1';

➡column_nameはimage、column_name2はsqを指定し動かしました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る