There are multiple more or less subtle differences. Some become obvious from looking at the description in the manual:
The manual about
integer ) →
Returns index of the first array element matching item, or 0 if no
The manual about
] ) →
Returns the subscript of the first occurrence of the second argument
in the array, or
NULL if it's not present. If the third argument is
given, the search begins at that subscript. The array must be
one-dimensional. Comparisons are done using
IS NOT DISTINCT FROM
semantics, so it is possible to search for
If not found,
idx() returns 0, but
idx() cannot handle
null at all.
intarray as a whole disallows arrays with
null values. So it also makes no sense to search for it, you always get
null when searching for
array_position() allows an offset in the search as 3rd parameter. So you can iterate through arrays to find one match after the other.
idx() can never find elements past the first occurrence. (
intarray is mostly optimized to deal with sorted, unique array elements.)
idx() accepts multi-dimensional arrays (treats them as flat), while
array_position() does not.
Non-standard array subscripts are ignored by
idx() (generally bypassing array dimensions and subscripts), but honored by
array_position(). So results can differ for seemingly equivalent, simple expressions! It's best to stick with standard array subscripts, but one must be aware of possibilities. See:
array_position() takes polymorphic arguments, so it works for any array type, while
idx() works for
integer exclusively. There are pros and cons to either.
idx() is faster with function type resolution, and will never be confused with different types, but it's limited to
integer or die.
All the added versatility of
array_position() comes at a price. Most importantly,
IS NOT DISTINCT FROM semantics to handle
null values, and that is substantially more expensive. This leads to the possibly most important difference:
idx() is much faster and scales much better with long arrays.
(Your "very informal benchmarking" mislead you somehow.)
db<>fiddle here - demonstrating all.