質問編集履歴

1

質問内容を修正しましたので、再度確認をお願いします。

2020/10/19 07:02

投稿

Yuetsuro
Yuetsuro

スコア5

test CHANGED
@@ -1 +1 @@
1
- レコードの型をけってしておき、pg_read_binary_file()関数Windows上の画像ファイルを取得したい
1
+ pg_read_binary_file()関数を使用して、Windows上の画像ファイルをテーブルにインポートしたい
test CHANGED
@@ -1,38 +1,108 @@
1
- やりたいこと:pg_read_binary_file()関数を使用して、Windows上の画像ファイルをテーブルにインポートするめ、事前に
1
+ 【要約】pg_read_binary_file()関数を使用して、Windows上の画像ファイルをテーブルにインポートい。
2
-
3
- カラムの型を確定するため、存在しないレコードをタイムスタンプをキーにSELECTを実行しておき、
4
-
5
-  record型の内部変数=normal_recのカラム名=imageに、パス=image_data_path上にある画像ファイルを取得したい。
6
2
 
7
3
 
8
4
 
5
+ やりたいこと:
6
+
7
+ 事前に、テーブルから存在しないレコードをタイムスタンプをキーにSELECTを実行して、normal_recのカラム型を決定しておく。
8
+
9
+ record型の内部変数=normal_recのカラム名(=image)に、パス=image_data_path上の画像ファイルを取得する。
10
+
11
+ 以下のコマンド入力で画像ファイルを取得できることは確認済みです。
12
+
13
+ # pg_read_binary_file('\raw_compressed.jpg')
14
+
15
+
16
+
17
+ →INSERTをEXECUTEで実行すると、"normal_rec.image"が存在しないというエラーになる。
18
+
19
+
20
+
21
+ 質問:画像ファイルを取得する領域の"normal_rec.image"が存在しないエラーになっていますが、レコードが存在しない場合、permanent_tableのカラムを
22
+
23
+ normal_recで使用できないのでしょうか。
24
+
25
+
26
+
27
+
28
+
29
+ (1) 実行前の条件:下記テーブルを作成しておく。
30
+
31
+
32
+
33
+ -- 作成しておくテーブル
34
+
35
+ create table v_image_table (
36
+
37
+ t_timestamp numeric (20,0),
38
+
39
+ o_id character varying(255),
40
+
41
+ v_number numeric (5,0),
42
+
43
+ dates date,
44
+
45
+ times time,
46
+
47
+ v_name varchar (30),
48
+
49
+ image_path character varying (255),
50
+
51
+ image bytea,
52
+
53
+ PRIMARY KEY(t_timestamp, o_id)
54
+
55
+ );
56
+
57
+
58
+
9
- 下記を実行すると、
59
+ (2) 下記を実行すると、
10
60
 
11
61
  DECLARE
12
62
 
13
- normal_rec record;
63
+ temporary_rec RECORD;
14
64
 
65
+ normal_rec record;
66
+
67
+ permanent_table_name VARCHAR(50);
68
+
15
- ...
69
+ ...
16
70
 
17
71
 
18
72
 
19
- execute_sql := concat('SELECT * FROM permanent_table WHERE w_timestamp = temporary_rec.w_timestamp);
73
+ BEGIN
20
74
 
21
- EXECUTE execute_sql INTO normal_rec;
75
+ ...
22
76
 
23
- CASE diagnostics_count
77
+ permanent_table_name := 'v_image_table';
24
78
 
25
- WHEN 0 THEN
79
+ execute_sql := concat('SELECT * FROM ', permanent_table_name, ' WHERE t_timestamp = ', temporary_rec.w_t_timestamp);
26
80
 
27
- -- 'path'のpngファイルをnormal_rec.image(bytea型)に入れる
81
+ RAISE NOTICE 'get_image() DEBUG 8123 : execute_sql = %', execute_sql;
28
82
 
29
- execute_sql := 'INSERT INTO normal_rec.image' || ' VALUES(pg_read_binary_file(' || '''' || image_data_path || '''' || '))';
83
+ EXECUTE execute_sql INTO normal_rec;
30
84
 
85
+ ...
86
+
87
+ execute_sql := concat('SELECT * FROM permanent_table WHERE w_timestamp = temporary_rec.w_timestamp);
88
+
89
+ EXECUTE execute_sql INTO normal_rec;
90
+
91
+ CASE diagnostics_count
92
+
93
+ WHEN 0 THEN
94
+
95
+ -- 'path'のpngファイルをnormal_rec.image(bytea型)に入れる
96
+
97
+ execute_sql := 'INSERT INTO normal_rec.image' || ' VALUES(pg_read_binary_file(' || '''' || image_data_path || '''' || '))';
98
+
31
- EXECUTE execute_sql;
99
+ EXECUTE execute_sql;
100
+
101
+ ...
32
102
 
33
103
 
34
104
 
35
- 以下のエラーになってしまいます。
105
+ (3) 以下のように"normal_rec.image"が存在しないというエラーになってしまいます。
36
106
 
37
107
  ERROR: relation "normal_rec.image" does not exist
38
108
 
@@ -46,10 +116,10 @@
46
116
 
47
117
 
48
118
 
49
- (1) 画像ファイルの取得は、「pg_read_binary_file()関数」の使用で正しいでしょうか。
50
119
 
51
120
 
121
+ ※すみません、初めて登録して質問しました。
52
122
 
53
- (2) 画像ファイルを取得する領域の"normal_rec.image"が存在しないエラーなっていまが、レコードが存在しない場合、permanent_tableカラム
123
+ postgresqlタグを作成後、Web画面上部に「トップ > PostgreSQLる質問 My PostgreSQL」と表示されていたでタグ指定して質問していると
54
124
 
55
-   normal_recで使用できなのでょうか
125
+ 思って