Improve wording of two error messages related to generated columns.
Clarify that you can "insert" into a generated column as long as what you're inserting is a DEFAULT placeholder. Also, use ERRCODE_GENERATED_ALWAYS in place of ERRCODE_SYNTAX_ERROR; there doesn't seem to be any reason to use the less specific errcode. Discussion: https://postgr.es/m/9q0sgcr416t.fsf@gmx.us
This commit is contained in:
parent
fe05129155
commit
d36228a9fc
@ -861,7 +861,7 @@ rewriteTargetListIU(List *targetList,
|
||||
if (!apply_default)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_GENERATED_ALWAYS),
|
||||
errmsg("cannot insert into column \"%s\"",
|
||||
errmsg("cannot insert a non-DEFAULT value into column \"%s\"",
|
||||
NameStr(att_tup->attname)),
|
||||
errdetail("Column \"%s\" is an identity column defined as GENERATED ALWAYS.",
|
||||
NameStr(att_tup->attname)),
|
||||
@ -899,8 +899,8 @@ rewriteTargetListIU(List *targetList,
|
||||
|
||||
if (!apply_default)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("cannot insert into column \"%s\"",
|
||||
(errcode(ERRCODE_GENERATED_ALWAYS),
|
||||
errmsg("cannot insert a non-DEFAULT value into column \"%s\"",
|
||||
NameStr(att_tup->attname)),
|
||||
errdetail("Column \"%s\" is a generated column.",
|
||||
NameStr(att_tup->attname))));
|
||||
@ -923,17 +923,20 @@ rewriteTargetListIU(List *targetList,
|
||||
*/
|
||||
if (commandType == CMD_UPDATE)
|
||||
{
|
||||
if (att_tup->attidentity == ATTRIBUTE_IDENTITY_ALWAYS && new_tle && !apply_default)
|
||||
if (att_tup->attidentity == ATTRIBUTE_IDENTITY_ALWAYS &&
|
||||
new_tle && !apply_default)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_GENERATED_ALWAYS),
|
||||
errmsg("column \"%s\" can only be updated to DEFAULT", NameStr(att_tup->attname)),
|
||||
errmsg("column \"%s\" can only be updated to DEFAULT",
|
||||
NameStr(att_tup->attname)),
|
||||
errdetail("Column \"%s\" is an identity column defined as GENERATED ALWAYS.",
|
||||
NameStr(att_tup->attname))));
|
||||
|
||||
if (att_tup->attgenerated && new_tle && !apply_default)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("column \"%s\" can only be updated to DEFAULT", NameStr(att_tup->attname)),
|
||||
(errcode(ERRCODE_GENERATED_ALWAYS),
|
||||
errmsg("column \"%s\" can only be updated to DEFAULT",
|
||||
NameStr(att_tup->attname)),
|
||||
errdetail("Column \"%s\" is a generated column.",
|
||||
NameStr(att_tup->attname))));
|
||||
}
|
||||
|
@ -93,16 +93,16 @@ LINE 1: ...E gtest_err_8 (a int PRIMARY KEY, b int GENERATED BY DEFAULT...
|
||||
INSERT INTO gtest1 VALUES (1);
|
||||
INSERT INTO gtest1 VALUES (2, DEFAULT); -- ok
|
||||
INSERT INTO gtest1 VALUES (3, 33); -- error
|
||||
ERROR: cannot insert into column "b"
|
||||
ERROR: cannot insert a non-DEFAULT value into column "b"
|
||||
DETAIL: Column "b" is a generated column.
|
||||
INSERT INTO gtest1 VALUES (3, 33), (4, 44); -- error
|
||||
ERROR: cannot insert into column "b"
|
||||
ERROR: cannot insert a non-DEFAULT value into column "b"
|
||||
DETAIL: Column "b" is a generated column.
|
||||
INSERT INTO gtest1 VALUES (3, DEFAULT), (4, 44); -- error
|
||||
ERROR: cannot insert into column "b"
|
||||
ERROR: cannot insert a non-DEFAULT value into column "b"
|
||||
DETAIL: Column "b" is a generated column.
|
||||
INSERT INTO gtest1 VALUES (3, 33), (4, DEFAULT); -- error
|
||||
ERROR: cannot insert into column "b"
|
||||
ERROR: cannot insert a non-DEFAULT value into column "b"
|
||||
DETAIL: Column "b" is a generated column.
|
||||
INSERT INTO gtest1 VALUES (3, DEFAULT), (4, DEFAULT); -- ok
|
||||
SELECT * FROM gtest1 ORDER BY a;
|
||||
@ -193,25 +193,25 @@ SELECT * FROM gtest1v;
|
||||
(1 row)
|
||||
|
||||
INSERT INTO gtest1v VALUES (4, 8); -- error
|
||||
ERROR: cannot insert into column "b"
|
||||
ERROR: cannot insert a non-DEFAULT value into column "b"
|
||||
DETAIL: Column "b" is a generated column.
|
||||
INSERT INTO gtest1v VALUES (5, DEFAULT); -- ok
|
||||
INSERT INTO gtest1v VALUES (6, 66), (7, 77); -- error
|
||||
ERROR: cannot insert into column "b"
|
||||
ERROR: cannot insert a non-DEFAULT value into column "b"
|
||||
DETAIL: Column "b" is a generated column.
|
||||
INSERT INTO gtest1v VALUES (6, DEFAULT), (7, 77); -- error
|
||||
ERROR: cannot insert into column "b"
|
||||
ERROR: cannot insert a non-DEFAULT value into column "b"
|
||||
DETAIL: Column "b" is a generated column.
|
||||
INSERT INTO gtest1v VALUES (6, 66), (7, DEFAULT); -- error
|
||||
ERROR: cannot insert into column "b"
|
||||
ERROR: cannot insert a non-DEFAULT value into column "b"
|
||||
DETAIL: Column "b" is a generated column.
|
||||
INSERT INTO gtest1v VALUES (6, DEFAULT), (7, DEFAULT); -- ok
|
||||
ALTER VIEW gtest1v ALTER COLUMN b SET DEFAULT 100;
|
||||
INSERT INTO gtest1v VALUES (8, DEFAULT); -- error
|
||||
ERROR: cannot insert into column "b"
|
||||
ERROR: cannot insert a non-DEFAULT value into column "b"
|
||||
DETAIL: Column "b" is a generated column.
|
||||
INSERT INTO gtest1v VALUES (8, DEFAULT), (9, DEFAULT); -- error
|
||||
ERROR: cannot insert into column "b"
|
||||
ERROR: cannot insert a non-DEFAULT value into column "b"
|
||||
DETAIL: Column "b" is a generated column.
|
||||
SELECT * FROM gtest1v;
|
||||
a | b
|
||||
|
@ -107,20 +107,20 @@ SELECT * FROM itest4;
|
||||
-- VALUES RTEs
|
||||
CREATE TABLE itest5 (a int generated always as identity, b text);
|
||||
INSERT INTO itest5 VALUES (1, 'a'); -- error
|
||||
ERROR: cannot insert into column "a"
|
||||
ERROR: cannot insert a non-DEFAULT value into column "a"
|
||||
DETAIL: Column "a" is an identity column defined as GENERATED ALWAYS.
|
||||
HINT: Use OVERRIDING SYSTEM VALUE to override.
|
||||
INSERT INTO itest5 VALUES (DEFAULT, 'a'); -- ok
|
||||
INSERT INTO itest5 VALUES (2, 'b'), (3, 'c'); -- error
|
||||
ERROR: cannot insert into column "a"
|
||||
ERROR: cannot insert a non-DEFAULT value into column "a"
|
||||
DETAIL: Column "a" is an identity column defined as GENERATED ALWAYS.
|
||||
HINT: Use OVERRIDING SYSTEM VALUE to override.
|
||||
INSERT INTO itest5 VALUES (DEFAULT, 'b'), (3, 'c'); -- error
|
||||
ERROR: cannot insert into column "a"
|
||||
ERROR: cannot insert a non-DEFAULT value into column "a"
|
||||
DETAIL: Column "a" is an identity column defined as GENERATED ALWAYS.
|
||||
HINT: Use OVERRIDING SYSTEM VALUE to override.
|
||||
INSERT INTO itest5 VALUES (2, 'b'), (DEFAULT, 'c'); -- error
|
||||
ERROR: cannot insert into column "a"
|
||||
ERROR: cannot insert a non-DEFAULT value into column "a"
|
||||
DETAIL: Column "a" is an identity column defined as GENERATED ALWAYS.
|
||||
HINT: Use OVERRIDING SYSTEM VALUE to override.
|
||||
INSERT INTO itest5 VALUES (DEFAULT, 'b'), (DEFAULT, 'c'); -- ok
|
||||
@ -197,7 +197,7 @@ SELECT * FROM itest1;
|
||||
-- GENERATED ALWAYS
|
||||
-- This is an error:
|
||||
INSERT INTO itest2 VALUES (10, 'xyz');
|
||||
ERROR: cannot insert into column "a"
|
||||
ERROR: cannot insert a non-DEFAULT value into column "a"
|
||||
DETAIL: Column "a" is an identity column defined as GENERATED ALWAYS.
|
||||
HINT: Use OVERRIDING SYSTEM VALUE to override.
|
||||
-- This inserts the row as presented:
|
||||
@ -313,7 +313,7 @@ SELECT * FROM itestv10;
|
||||
(4 rows)
|
||||
|
||||
INSERT INTO itestv11 VALUES (10, 'xyz');
|
||||
ERROR: cannot insert into column "a"
|
||||
ERROR: cannot insert a non-DEFAULT value into column "a"
|
||||
DETAIL: Column "a" is an identity column defined as GENERATED ALWAYS.
|
||||
HINT: Use OVERRIDING SYSTEM VALUE to override.
|
||||
INSERT INTO itestv11 OVERRIDING SYSTEM VALUE VALUES (11, 'xyz');
|
||||
|
@ -1475,10 +1475,10 @@ INSERT INTO rw_view1 (id) VALUES (2);
|
||||
INSERT INTO base_tbl (id, idplus1) VALUES (3, DEFAULT);
|
||||
INSERT INTO rw_view1 (id, idplus1) VALUES (4, DEFAULT);
|
||||
INSERT INTO base_tbl (id, idplus1) VALUES (5, 6); -- error
|
||||
ERROR: cannot insert into column "idplus1"
|
||||
ERROR: cannot insert a non-DEFAULT value into column "idplus1"
|
||||
DETAIL: Column "idplus1" is a generated column.
|
||||
INSERT INTO rw_view1 (id, idplus1) VALUES (6, 7); -- error
|
||||
ERROR: cannot insert into column "idplus1"
|
||||
ERROR: cannot insert a non-DEFAULT value into column "idplus1"
|
||||
DETAIL: Column "idplus1" is a generated column.
|
||||
SELECT * FROM base_tbl;
|
||||
id | idplus1
|
||||
|
Loading…
x
Reference in New Issue
Block a user