pg_atoi()
Is there a reason why pg_atoi() was programmed to fail if the entire
input string is not valid?
i.e. "109" yields 109, but "109 apples" yields an error.
Snippet from pg_atoi() in src/backend/utils/adt/numutils.c:
l = strtol(s, &badp, 10);
if (errno) /* strtol must set ERANGE */
elog(ERROR, "pg_atoi: error reading \"%s\": %m", s);
if (badp && *badp && (*badp != c))
elog(ERROR, "pg_atoi: error in \"%s\": can\'t parse
\"%s\"", s, badp);
Thanks,
R.
Richard Harvey Chapman <hchapman@3gfp.com> writes:
Is there a reason why pg_atoi() was programmed to fail if the entire
input string is not valid?
i.e. "109" yields 109, but "109 apples" yields an error.
Because that's what it ought to do, if you ask me ;-).
"109 foo" is not a valid integer value. If you want your app to
accept such things, do your own input parsing and filtering.
A database server should not be lax about what it considers valid
data.
regards, tom lane