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

Commit9e3f42f

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 parent6c5f68e commit9e3f42f

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
@@ -975,23 +975,23 @@ CheckValidResultRel(Relation resultRel, CmdType operation)
975975
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
976976
errmsg("cannot insert into view \"%s\"",
977977
RelationGetRelationName(resultRel)),
978-
errhint("Tomakethe view insertable, provide anunconditional ON INSERTDO INSTEAD ruleor anINSTEAD OF INSERTtrigger.")));
978+
errhint("Toenable inserting intothe view, provide anINSTEAD OF INSERTtriggeror anunconditional ON INSERTDO INSTEAD rule.")));
979979
break;
980980
caseCMD_UPDATE:
981981
if (!trigDesc|| !trigDesc->trig_update_instead_row)
982982
ereport(ERROR,
983983
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
984984
errmsg("cannot update view \"%s\"",
985985
RelationGetRelationName(resultRel)),
986-
errhint("Tomakethe view updatable, provide anunconditional ON UPDATEDO INSTEAD ruleor anINSTEAD OF UPDATEtrigger.")));
986+
errhint("Toenable updatingthe view, provide anINSTEAD OF UPDATEtriggeror anunconditional ON UPDATEDO INSTEAD rule.")));
987987
break;
988988
caseCMD_DELETE:
989989
if (!trigDesc|| !trigDesc->trig_delete_instead_row)
990990
ereport(ERROR,
991991
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
992992
errmsg("cannot delete from view \"%s\"",
993993
RelationGetRelationName(resultRel)),
994-
errhint("Tomakethe view updatable, provide anunconditional ON DELETEDO INSTEAD ruleor anINSTEAD OF DELETEtrigger.")));
994+
errhint("Toenable deleting fromthe view, provide anINSTEAD OF DELETEtriggeror anunconditional ON DELETEDO INSTEAD rule.")));
995995
break;
996996
default:
997997
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
@@ -2318,23 +2318,23 @@ rewriteTargetView(Query *parsetree, Relation view)
23182318
errmsg("cannot insert into view \"%s\"",
23192319
RelationGetRelationName(view)),
23202320
errdetail_internal("%s",_(auto_update_detail)),
2321-
errhint("Tomakethe view insertable, provide anunconditional ON INSERTDO INSTEAD ruleor anINSTEAD OF INSERTtrigger.")));
2321+
errhint("Toenable inserting intothe view, provide anINSTEAD OF INSERTtriggeror anunconditional ON INSERTDO INSTEAD rule.")));
23222322
break;
23232323
caseCMD_UPDATE:
23242324
ereport(ERROR,
23252325
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
23262326
errmsg("cannot update view \"%s\"",
23272327
RelationGetRelationName(view)),
23282328
errdetail_internal("%s",_(auto_update_detail)),
2329-
errhint("Tomakethe view updatable, provide anunconditional ON UPDATEDO INSTEAD ruleor anINSTEAD OF UPDATEtrigger.")));
2329+
errhint("Toenable updatingthe view, provide anINSTEAD OF UPDATEtriggeror anunconditional ON UPDATEDO INSTEAD rule.")));
23302330
break;
23312331
caseCMD_DELETE:
23322332
ereport(ERROR,
23332333
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
23342334
errmsg("cannot delete from view \"%s\"",
23352335
RelationGetRelationName(view)),
23362336
errdetail_internal("%s",_(auto_update_detail)),
2337-
errhint("Tomakethe view updatable, provide anunconditional ON DELETEDO INSTEAD ruleor anINSTEAD OF DELETEtrigger.")));
2337+
errhint("Toenable deleting fromthe view, provide anINSTEAD OF DELETEtriggeror anunconditional ON DELETEDO INSTEAD rule.")));
23382338
break;
23392339
default:
23402340
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