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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

4回答

15430閲覧

DBに画像を入れたい。

NextSt

総合スコア13

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2018/08/02 05:58

編集2018/08/03 01:22

●環境
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...
^
とエラーが出ていました。

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

bytea_importはpostgreSQLにデフォルトである関数ではありません。

function bytea_import(unknown) does not exist

これはそんな関数ないよ、と言われています。

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

投稿2018/08/03 02:15

yukihisa

総合スコア672

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NextSt

2018/08/03 02:24

ついさっきようやく、INSERT INTO~~の書き方を調べ、 アップロードができるようになりました。 (別の問題ができてしまいましたが…。) ただ、なんでbytea_importが利用できないのか不明で、 そっちの原因究明にあたるか、先に進むか悩んでいた所でした。 原因がわかりすっきりしました、ありがとうございました。
yukihisa

2018/08/03 02:33

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

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を指定し動かしました。

投稿2018/08/03 02:31

編集2018/08/03 04:59
NextSt

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2018/08/02 07:05

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NextSt

2018/08/02 07: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の文字の下に表示されております。 何度か調整を試みましたがうまく調整できませんでした。
Orlofsky

2018/08/02 07:32

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

2018/08/02 07:43

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

0

OS:Windows Server2012 R2

ですので

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

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

投稿2018/08/02 06:45

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NextSt

2018/08/02 06:58

リンク修正の点ありがとうございました。 また~~~~の部分はフォルダ名等が入っておりますが、 フォルダのプロパティよりコピーペーストしたものなので、 正しいものを入力しています。 (アクセスできるかの確認済) 空白・全角文字については入っておりません。 念のため当該箇所の質問文を一部修正致しました。
NextSt

2018/08/02 07:02

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問