A recomendações de documentação usando o
generate_subscripts função. A função abaixo emular o array_search do PHP :CREATE FUNCTION array_search(needle ANYELEMENT, haystack ANYARRAY)
RETURNS INT AS $$
SELECT i
FROM generate_subscripts($2, 1) AS i
WHERE $2[i] = $1
ORDER BY i
$$ LANGUAGE sql STABLE;
Isso retorna o índice da primeira correspondência, se presente. Se você quiser todas as correspondências, basta alterar
RETURNS INT para RETURNS SETOF INT . Esta função, como está, retorna NULL se nenhuma correspondência for encontrada. Esta função só funciona com arrays unidimensionais.
Além disso, tenha em mente que
array_search(NULL, a) sempre retorna NULL , mesmo que a matriz contenha elementos nulos:> SELECT array_search(null, array[1, 2, null, 4]);
array_search
--------------
(1 row)
Isso ocorre porque o SQL considera
NULL = NULL ser desconhecido (ou seja, NULL ). Consulte comparação de funções
. Se você quiser array_search para encontrar NULL elementos, mudança WHERE $2[i] = $1
para
WHERE $2[i] IS NOT DISTINCT FROM $1