Details
-
Bug
-
Status: Resolved
-
Normal
-
Resolution: Fixed
-
None
-
Correctness - Unrecoverable Corruption / Loss
-
Critical
-
Low Hanging Fruit
-
Code Inspection
-
All
-
None
-
Description
In 4.1 UPDATE name = name + offset support got extended to numbers and strings (not just counters) but the behavior isn’t consistent
Number: throws a error due to Int32Type.add(null, 42) failing
String: returns the non-null updated values
What Postgres does is keeps the value null
postgres=# create table x (pk int PRIMARY KEY, a int, b text); CREATE TABLE postgres=# insert into x (pk, a, b) values(0, null, null); INSERT 0 1 postgres=# UPDATE x SET a = a + 1 WHERE pk = 0; UPDATE 1 postgres=# select * from x; pk | a | b ----+---+--- 0 | | (1 row) postgres=# UPDATE x SET b = b + 'one' WHERE pk = 0; ERROR: operator does not exist: text + unknown LINE 1: UPDATE x SET b = b + 'one' WHERE pk = 0; ^ HINT: No operator matches the given name and argument types. You might need to add explicit type casts. postgres=# UPDATE x SET b = b + CAST('one' as text) WHERE pk = 0; ERROR: operator does not exist: text + text LINE 1: UPDATE x SET b = b + CAST('one' as text) WHERE pk = 0; ^ HINT: No operator matches the given name and argument types. You might need to add explicit type casts.