前提・実現したいこと
画像ファイル(とても小さいサイズ)をPostgreSQLに保存したい。
スーパーユーザを使わずに行いたい。
(事前準備としてスーパーユーザを使う事は可能。)
発生している問題
byteaのカラムを作り、pg_read_binary_fileを使用してみましたが、スーパーユーザでないと使えないようでした。
また、こちらの回答のベストアンサーを試してみましたが、lo_importを行うのにスーパーユーザが必要のようでした。
補足情報(FW/ツールのバージョンなど)
PostgreSQL 9.2.4
DBサーバ CentOS7
追記
コピペできない環境だったので、情報量の少ない質問になってしまい、申し訳なかったです。
ご指摘の通りユーザにUPDATE権限がなかったので追加しましたが、エラー内容は変わりませんでした。
使用ユーザの作成テーブルへの権限はUPDATEとINSERTです。
●関数(スーバーユーザで実行)
create or replace function bytea_import(p_path text, p_result out bytea) language plpgsql as $$ declare l_oid oid; begin select lo_import(p_path) into l_oid; select lo_get(l_oid) INTO p_result; perform lo_unlink(l_oid); end;$$;
●テーブルクリエイト文
create table mst_table ( e_id integer primary key, file_no integer default 0 not null, file_name text , file_data bytea );
●一般ユーザでpsqlから下記を実行
database=> INSERT INTO mst_table (e_id, file_no, file_name, file_data) database-> SELECT database-> nextval('seq_id'), database-> nextval('seq_no'), database-> 'file.jpg', database-> bytea_import('/home/appuser/tool/images/file.jpg'); ERROR: must be superuser to use server-side lo_import() HINT: Anyone can use the client-side lo_import() provided by libpq. CONTEXT: SQL statement "select lo_import(p_path)" PL/pgSQL function bytea_import(text) line 5 at SQL statement database=>
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。