On 1/13/14, 7:10 PM, Kevin Grittner wrote:
Tom Lane<t...@sss.pgh.pa.us> wrote:
>I think the argument really is that some people don't want to
>make their application code work with such cases (which is fine)
>so they'd like an inside-the-database guarantee that the app code
>won't ever see such cases. Which is less fine, ISTM: if you fear
>some part of your app might be generating such arrays, then you
>don't have such little use for the feature after all, eh?
While I don't see the argument for dropping support for lower
bounds other than 1 as long as standard syntax for creating arrays
yields arrays staring at 1, this argument holds no water at all. I
have done too many conversions from databases which did not enforce
data integrity rules not to have a lot of sympathy for people
wanting to have the ability to easily constrain data to whatever
their business rules say it should look like. The fact that some
day some new programmer might not be aware of all business rules,
or might choose to try to ignore them is the reason you add
constraints to columns and domains.
I think providing functions that make it easy to enforce this rule
make a lot of sense, as it would make a lot of application code
simpler, easier to read, and less fragile. I support overloading
functions with simpler parameter lists for standard-conforming
arrays; I don't support dropping support for whoever might be using
non-conforming arrays. A veriable lower bound is an extension to
the standard, and extensions are fine.
To be clear: I am completely fine with continuing to support custom lower bounds (to quote my
original email: "Obviously we can't just drop support, but what about an initdb (or hell,
even configure) option to disallow arrays with a lower bound <> 1?").
It might also be possible to protect users on the access side instead: provide
alternate functions that protect you if you pass them an array that does have a
custom lower bound. But I'm not so sure that'll work out, since one of the
biggest offenders here is:
FOR i IN 1..array_upper(some_array) LOOP.
Yes, today you can use FOREACH, but what about all your legacy code that's
ass-u-ming that the lower bound is 1?
--
Jim C. Nasby, Data Architect j...@nasby.net
512.569.9461 (cell) http://jim.nasby.net
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers