質問: ### 前提・実現したいこと 画像ファイル(とても小さいサイズ)を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=> ```
回答: > > lo_importを行うのにスーパーユーザが必要のようでした。 > > > その時のエラーメッセージを省略しないで質問に追記されては? 差支えない範囲で、実際に実行したコードとCREATE TABLE も追記した方が解決が早いのでは?