Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit32f7c0a

Browse files
committed
Improve error message when view is not updatable
Avoid using the term "updatable" in confusing ways. Suggest a triggerfirst, before a rule.
1 parent1b1d3d9 commit32f7c0a

File tree

3 files changed

+26
-26
lines changed

3 files changed

+26
-26
lines changed

‎src/backend/executor/execMain.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -976,23 +976,23 @@ CheckValidResultRel(Relation resultRel, CmdType operation)
976976
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
977977
errmsg("cannot insert into view \"%s\"",
978978
RelationGetRelationName(resultRel)),
979-
errhint("Tomakethe view insertable, provide anunconditional ON INSERTDO INSTEAD ruleor anINSTEAD OF INSERTtrigger.")));
979+
errhint("Toenable inserting intothe view, provide anINSTEAD OF INSERTtriggeror anunconditional ON INSERTDO INSTEAD rule.")));
980980
break;
981981
caseCMD_UPDATE:
982982
if (!trigDesc|| !trigDesc->trig_update_instead_row)
983983
ereport(ERROR,
984984
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
985985
errmsg("cannot update view \"%s\"",
986986
RelationGetRelationName(resultRel)),
987-
errhint("Tomakethe view updatable, provide anunconditional ON UPDATEDO INSTEAD ruleor anINSTEAD OF UPDATEtrigger.")));
987+
errhint("Toenable updatingthe view, provide anINSTEAD OF UPDATEtriggeror anunconditional ON UPDATEDO INSTEAD rule.")));
988988
break;
989989
caseCMD_DELETE:
990990
if (!trigDesc|| !trigDesc->trig_delete_instead_row)
991991
ereport(ERROR,
992992
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
993993
errmsg("cannot delete from view \"%s\"",
994994
RelationGetRelationName(resultRel)),
995-
errhint("Tomakethe view updatable, provide anunconditional ON DELETEDO INSTEAD ruleor anINSTEAD OF DELETEtrigger.")));
995+
errhint("Toenable deleting fromthe view, provide anINSTEAD OF DELETEtriggeror anunconditional ON DELETEDO INSTEAD rule.")));
996996
break;
997997
default:
998998
elog(ERROR,"unrecognized CmdType: %d", (int)operation);

‎src/backend/rewrite/rewriteHandler.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2344,23 +2344,23 @@ rewriteTargetView(Query *parsetree, Relation view)
23442344
errmsg("cannot insert into view \"%s\"",
23452345
RelationGetRelationName(view)),
23462346
errdetail_internal("%s",_(auto_update_detail)),
2347-
errhint("Tomakethe view insertable, provide anunconditional ON INSERTDO INSTEAD ruleor anINSTEAD OF INSERTtrigger.")));
2347+
errhint("Toenable inserting intothe view, provide anINSTEAD OF INSERTtriggeror anunconditional ON INSERTDO INSTEAD rule.")));
23482348
break;
23492349
caseCMD_UPDATE:
23502350
ereport(ERROR,
23512351
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
23522352
errmsg("cannot update view \"%s\"",
23532353
RelationGetRelationName(view)),
23542354
errdetail_internal("%s",_(auto_update_detail)),
2355-
errhint("Tomakethe view updatable, provide anunconditional ON UPDATEDO INSTEAD ruleor anINSTEAD OF UPDATEtrigger.")));
2355+
errhint("Toenable updatingthe view, provide anINSTEAD OF UPDATEtriggeror anunconditional ON UPDATEDO INSTEAD rule.")));
23562356
break;
23572357
caseCMD_DELETE:
23582358
ereport(ERROR,
23592359
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
23602360
errmsg("cannot delete from view \"%s\"",
23612361
RelationGetRelationName(view)),
23622362
errdetail_internal("%s",_(auto_update_detail)),
2363-
errhint("Tomakethe view updatable, provide anunconditional ON DELETEDO INSTEAD ruleor anINSTEAD OF DELETEtrigger.")));
2363+
errhint("Toenable deleting fromthe view, provide anINSTEAD OF DELETEtriggeror anunconditional ON DELETEDO INSTEAD rule.")));
23642364
break;
23652365
default:
23662366
elog(ERROR,"unrecognized CmdType: %d",

‎src/test/regress/expected/updatable_views.out

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -136,83 +136,83 @@ SELECT table_name, column_name, is_updatable
136136
DELETE FROM ro_view1;
137137
ERROR: cannot delete from view "ro_view1"
138138
DETAIL: Views containing DISTINCT are not automatically updatable.
139-
HINT: Tomakethe view updatable, provide anunconditional ON DELETEDO INSTEAD ruleor anINSTEAD OF DELETEtrigger.
139+
HINT: Toenable deleting fromthe view, provide anINSTEAD OF DELETEtriggeror anunconditional ON DELETEDO INSTEAD rule.
140140
DELETE FROM ro_view2;
141141
ERROR: cannot delete from view "ro_view2"
142142
DETAIL: Views containing GROUP BY are not automatically updatable.
143-
HINT: Tomakethe view updatable, provide anunconditional ON DELETEDO INSTEAD ruleor anINSTEAD OF DELETEtrigger.
143+
HINT: Toenable deleting fromthe view, provide anINSTEAD OF DELETEtriggeror anunconditional ON DELETEDO INSTEAD rule.
144144
DELETE FROM ro_view3;
145145
ERROR: cannot delete from view "ro_view3"
146146
DETAIL: Views containing HAVING are not automatically updatable.
147-
HINT: Tomakethe view updatable, provide anunconditional ON DELETEDO INSTEAD ruleor anINSTEAD OF DELETEtrigger.
147+
HINT: Toenable deleting fromthe view, provide anINSTEAD OF DELETEtriggeror anunconditional ON DELETEDO INSTEAD rule.
148148
DELETE FROM ro_view4;
149149
ERROR: cannot delete from view "ro_view4"
150150
DETAIL: Views that return columns that are not columns of their base relation are not automatically updatable.
151-
HINT: Tomakethe view updatable, provide anunconditional ON DELETEDO INSTEAD ruleor anINSTEAD OF DELETEtrigger.
151+
HINT: Toenable deleting fromthe view, provide anINSTEAD OF DELETEtriggeror anunconditional ON DELETEDO INSTEAD rule.
152152
DELETE FROM ro_view5;
153153
ERROR: cannot delete from view "ro_view5"
154154
DETAIL: Views that return columns that are not columns of their base relation are not automatically updatable.
155-
HINT: Tomakethe view updatable, provide anunconditional ON DELETEDO INSTEAD ruleor anINSTEAD OF DELETEtrigger.
155+
HINT: Toenable deleting fromthe view, provide anINSTEAD OF DELETEtriggeror anunconditional ON DELETEDO INSTEAD rule.
156156
DELETE FROM ro_view6;
157157
ERROR: cannot delete from view "ro_view6"
158158
DETAIL: Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable.
159-
HINT: Tomakethe view updatable, provide anunconditional ON DELETEDO INSTEAD ruleor anINSTEAD OF DELETEtrigger.
159+
HINT: Toenable deleting fromthe view, provide anINSTEAD OF DELETEtriggeror anunconditional ON DELETEDO INSTEAD rule.
160160
UPDATE ro_view7 SET a=a+1;
161161
ERROR: cannot update view "ro_view7"
162162
DETAIL: Views containing WITH are not automatically updatable.
163-
HINT: Tomakethe view updatable, provide anunconditional ON UPDATEDO INSTEAD ruleor anINSTEAD OF UPDATEtrigger.
163+
HINT: Toenable updatingthe view, provide anINSTEAD OF UPDATEtriggeror anunconditional ON UPDATEDO INSTEAD rule.
164164
UPDATE ro_view8 SET a=a+1;
165165
ERROR: cannot update view "ro_view8"
166166
DETAIL: Views containing LIMIT or OFFSET are not automatically updatable.
167-
HINT: Tomakethe view updatable, provide anunconditional ON UPDATEDO INSTEAD ruleor anINSTEAD OF UPDATEtrigger.
167+
HINT: Toenable updatingthe view, provide anINSTEAD OF UPDATEtriggeror anunconditional ON UPDATEDO INSTEAD rule.
168168
UPDATE ro_view9 SET a=a+1;
169169
ERROR: cannot update view "ro_view9"
170170
DETAIL: Views containing LIMIT or OFFSET are not automatically updatable.
171-
HINT: Tomakethe view updatable, provide anunconditional ON UPDATEDO INSTEAD ruleor anINSTEAD OF UPDATEtrigger.
171+
HINT: Toenable updatingthe view, provide anINSTEAD OF UPDATEtriggeror anunconditional ON UPDATEDO INSTEAD rule.
172172
UPDATE ro_view10 SET a=a+1;
173173
ERROR: cannot update view "ro_view10"
174174
DETAIL: Views that do not select from a single table or view are not automatically updatable.
175-
HINT: Tomakethe view updatable, provide anunconditional ON UPDATEDO INSTEAD ruleor anINSTEAD OF UPDATEtrigger.
175+
HINT: Toenable updatingthe view, provide anINSTEAD OF UPDATEtriggeror anunconditional ON UPDATEDO INSTEAD rule.
176176
UPDATE ro_view11 SET a=a+1;
177177
ERROR: cannot update view "ro_view11"
178178
DETAIL: Views that do not select from a single table or view are not automatically updatable.
179-
HINT: Tomakethe view updatable, provide anunconditional ON UPDATEDO INSTEAD ruleor anINSTEAD OF UPDATEtrigger.
179+
HINT: Toenable updatingthe view, provide anINSTEAD OF UPDATEtriggeror anunconditional ON UPDATEDO INSTEAD rule.
180180
UPDATE ro_view12 SET a=a+1;
181181
ERROR: cannot update view "ro_view12"
182182
DETAIL: Views that do not select from a single table or view are not automatically updatable.
183-
HINT: Tomakethe view updatable, provide anunconditional ON UPDATEDO INSTEAD ruleor anINSTEAD OF UPDATEtrigger.
183+
HINT: Toenable updatingthe view, provide anINSTEAD OF UPDATEtriggeror anunconditional ON UPDATEDO INSTEAD rule.
184184
INSERT INTO ro_view13 VALUES (3, 'Row 3');
185185
ERROR: cannot insert into view "ro_view13"
186186
DETAIL: Views that do not select from a single table or view are not automatically updatable.
187-
HINT: Tomakethe view insertable, provide anunconditional ON INSERTDO INSTEAD ruleor anINSTEAD OF INSERTtrigger.
187+
HINT: Toenable inserting intothe view, provide anINSTEAD OF INSERTtriggeror anunconditional ON INSERTDO INSTEAD rule.
188188
INSERT INTO ro_view14 VALUES (null);
189189
ERROR: cannot insert into view "ro_view14"
190190
DETAIL: Views that return system columns are not automatically updatable.
191-
HINT: Tomakethe view insertable, provide anunconditional ON INSERTDO INSTEAD ruleor anINSTEAD OF INSERTtrigger.
191+
HINT: Toenable inserting intothe view, provide anINSTEAD OF INSERTtriggeror anunconditional ON INSERTDO INSTEAD rule.
192192
INSERT INTO ro_view15 VALUES (3, 'ROW 3');
193193
ERROR: cannot insert into view "ro_view15"
194194
DETAIL: Views that return columns that are not columns of their base relation are not automatically updatable.
195-
HINT: Tomakethe view insertable, provide anunconditional ON INSERTDO INSTEAD ruleor anINSTEAD OF INSERTtrigger.
195+
HINT: Toenable inserting intothe view, provide anINSTEAD OF INSERTtriggeror anunconditional ON INSERTDO INSTEAD rule.
196196
INSERT INTO ro_view16 VALUES (3, 'Row 3', 3);
197197
ERROR: cannot insert into view "ro_view16"
198198
DETAIL: Views that return the same column more than once are not automatically updatable.
199-
HINT: Tomakethe view insertable, provide anunconditional ON INSERTDO INSTEAD ruleor anINSTEAD OF INSERTtrigger.
199+
HINT: Toenable inserting intothe view, provide anINSTEAD OF INSERTtriggeror anunconditional ON INSERTDO INSTEAD rule.
200200
INSERT INTO ro_view17 VALUES (3, 'ROW 3');
201201
ERROR: cannot insert into view "ro_view1"
202202
DETAIL: Views containing DISTINCT are not automatically updatable.
203-
HINT: Tomakethe view insertable, provide anunconditional ON INSERTDO INSTEAD ruleor anINSTEAD OF INSERTtrigger.
203+
HINT: Toenable inserting intothe view, provide anINSTEAD OF INSERTtriggeror anunconditional ON INSERTDO INSTEAD rule.
204204
INSERT INTO ro_view18 VALUES (3, 'ROW 3');
205205
ERROR: cannot insert into view "ro_view18"
206206
DETAIL: Security-barrier views are not automatically updatable.
207-
HINT: Tomakethe view insertable, provide anunconditional ON INSERTDO INSTEAD ruleor anINSTEAD OF INSERTtrigger.
207+
HINT: Toenable inserting intothe view, provide anINSTEAD OF INSERTtriggeror anunconditional ON INSERTDO INSTEAD rule.
208208
DELETE FROM ro_view19;
209209
ERROR: cannot delete from view "ro_view19"
210210
DETAIL: Views that do not select from a single table or view are not automatically updatable.
211-
HINT: Tomakethe view updatable, provide anunconditional ON DELETEDO INSTEAD ruleor anINSTEAD OF DELETEtrigger.
211+
HINT: Toenable deleting fromthe view, provide anINSTEAD OF DELETEtriggeror anunconditional ON DELETEDO INSTEAD rule.
212212
UPDATE ro_view20 SET max_value=1000;
213213
ERROR: cannot update view "ro_view20"
214214
DETAIL: Views that do not select from a single table or view are not automatically updatable.
215-
HINT: Tomakethe view updatable, provide anunconditional ON UPDATEDO INSTEAD ruleor anINSTEAD OF UPDATEtrigger.
215+
HINT: Toenable updatingthe view, provide anINSTEAD OF UPDATEtriggeror anunconditional ON UPDATEDO INSTEAD rule.
216216
DROP TABLE base_tbl CASCADE;
217217
NOTICE: drop cascades to 16 other objects
218218
DETAIL: drop cascades to view ro_view1

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp