【要約】pg_read_binary_file()関数を使用して、Windows上の画像ファイルをテーブルにインポートしたい。
やりたいこと:
事前に、テーブルから存在しないレコードをタイムスタンプをキーにSELECTを実行して、normal_recのカラム型を決定しておく。
record型の内部変数=normal_recのカラム名(=image)に、パス=image_data_path上の画像ファイルを取得する。
以下のコマンド入力で画像ファイルを取得できることは確認済みです。
# pg_read_binary_file('\raw_compressed.jpg')
→INSERTをEXECUTEで実行すると、"normal_rec.image"が存在しないというエラーになる。
質問:画像ファイルを取得する領域の"normal_rec.image"が存在しないエラーになっていますが、レコードが存在しない場合、permanent_tableのカラムを
normal_recで使用できないのでしょうか。
(1) 実行前の条件:下記テーブルを作成しておく。
-- 作成しておくテーブル create table v_image_table ( t_timestamp numeric (20,0), o_id character varying(255), v_number numeric (5,0), dates date, times time, v_name varchar (30), image_path character varying (255), image bytea, PRIMARY KEY(t_timestamp, o_id) );
(2) 下記を実行すると、
DECLARE
temporary_rec RECORD;
normal_rec record;
permanent_table_name VARCHAR(50);
...
BEGIN ... permanent_table_name := 'v_image_table'; execute_sql := concat('SELECT * FROM ', permanent_table_name, ' WHERE t_timestamp = ', temporary_rec.w_t_timestamp); RAISE NOTICE 'get_image() DEBUG 8123 : execute_sql = %', execute_sql; EXECUTE execute_sql INTO normal_rec; ... execute_sql := concat('SELECT * FROM permanent_table WHERE w_timestamp = temporary_rec.w_timestamp); EXECUTE execute_sql INTO normal_rec; CASE diagnostics_count WHEN 0 THEN -- 'path'のpngファイルをnormal_rec.image(bytea型)に入れる execute_sql := 'INSERT INTO normal_rec.image' || ' VALUES(pg_read_binary_file(' || '''' || image_data_path || '''' || '))'; EXECUTE execute_sql; ...
(3) 以下のように"normal_rec.image"が存在しないというエラーになってしまいます。
ERROR: relation "normal_rec.image" does not exist
LINE 1: INSERT INTO normal_rec.image VALUES(pg_read_binary_fi...
^
QUERY: INSERT INTO normal_rec.image VALUES(pg_read_binary_file('\raw_compressed.jpg'))
CONTEXT: PL/pgSQL function get_image() line 210 at EXECUTE
※すみません、初めて登録して質問しました。
postgresqlタグを作成後、Web画面上部に「トップ > PostgreSQLに対する質問 My PostgreSQL」と表示されていたのでタグを指定して質問していると
思っていました。
あなたの回答
tips
プレビュー