Re: [HACKERS] [PATCH] Generic type subscripting
Robert Haas <robertmhaas@gmail.com>
On Thu, Jan 11, 2018 at 1:37 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote: >> I don't think I missed the point at all -- this is the exact same set >> of issues that arise with respect to functions. Indeed, I gave an >> example of a function that needs to be updated if a column of the >> input type is altered. In the case of functions, we've decided that >> it's not our problem. > > Right, but in the case of stored arrays, we've decided that it *is* > our problem (as indeed it must be, because the user has no tools with > which they could fix a representation change for stored data). The > question is to what extent that need would propagate to pseudo array > types. I think I view the rationale a bit differently. Let's say that a user defines a composite type as (a int, b text) and uses that composite type as a column type. Then, somebody tries to change column a to have type text, and suppose we don't throw an error but simply permit the operation. If the user now tries to select from the offending column, the server will very likely crash. In contrast, in the case where the user has defined an SQL function that selects $1.a and returns it as an int, they will get a runtime error when they try to use the function. In my mind, that is the critical difference. An operation that can cause the server to crash or emit internal errors must be prohibited, whereas an operation that might cause stuff to fail with suitable error messages in the future can be allowed. In other words, the problem isn't that the user has no tools to fix the problem; it's that, with certain exceptions like superusers indulging in random catalog-hackery, unprivileged users shouldn't be allowed to break the world. You might point out that the chances of break-the-world behavior for type subscripting are pretty high, since we're slinging around arguments of type internal. But C functions are always an exception to the notion that we'll trap and report errors. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Commits
-
Throw error when assigning jsonb scalar instead of a composite object
- aa6e46daf530 14.0 landed
-
Filling array gaps during jsonb subscripting
- 81fcc72e6622 14.0 landed
-
Implementation of subscripting for jsonb
- 676887a3b0b8 14.0 landed
-
Allow ALTER TYPE to update an existing type's typsubscript value.
- 8c15a297452e 14.0 landed
-
Allow subscripting of hstore values.
- 0ec5f7e78231 14.0 landed
-
Support subscripting of arbitrary types, not only arrays.
- c7aba7c14efd 14.0 landed
-
jit: Reference function pointer types via llvmjit_types.c.
- df99ddc70b97 14.0 landed
-
Teach contain_leaked_vars that assignment SubscriptingRefs are leaky.
- c0549cee07ea 13.2 landed
- 62ee70331336 14.0 landed
- 3470caa21bf8 10.16 landed
- 2f1997b1551a 12.6 landed
- 1f229f4fdcf8 11.11 landed
- 17c77c8c90f7 9.6.21 landed
-
jit: Correct parameter type for generated expression evaluation functions.
- 5da871bfa1ba 14.0 landed
- 1e16ad101459 11.11 landed
- 27b57f806dc2 12.6 landed
- 01c6370a32e5 13.2 landed
-
Renaming for new subscripting mechanism
- 558d77f20e4e 12.0 landed
-
Fix assertion failure for SSL connections.
- ab69ea9feeb9 12.0 cited
-
Teach eval_const_expressions() to handle some more cases.
- 3decd150a2d5 11.0 cited