Как получить доступ к внутреннему индексу массива с помощью postgreSQL?
Это мое (возможно, обычное для вас)неоптимизированная решение:
Обходной путь для проблемы PG с неоптимизированной внутренней функцией:
CREATE FUNCTION unnest_with_idx(anyarray)
RETURNS TABLE(idx integer, val anyelement) AS
$
SELECT generate_series(1,array_upper($1,1)) as idx, unnest($1) as val;
$ LANGUAGE SQL IMMUTABLE;
Тестовое задание:
SELECT idx,val from unnest_with_idx(array[1,20,3,5]) as t;
Но, как я уже сказал,неоптимизированная, Я могу'не верю (!!), что PostgreSQL ненет внутреннего индекса для массивов ...? Но в этом случае вопрос заключается в том, как напрямую получить доступ к этому индексу, гдеGIN-как внутренний счетчик?
ПРИМЕЧАНИЕ 1: решение выше и вопрос не совпадает сКак вы создаете индекс по каждому элементу массива? ", Тоже не такой какМожет ли PostgreSQL индексировать столбцы массива? " потому что функция предназначена для изолированного массива, а не для индекса таблицы для полей массива.
ПРИМЕЧАНИЕ2 (отредактировано после ответов): «индексы массива " (более популярный термин) или "массив индексов " или же "счетчик массивов " являются терминами, которые мы можем использовать в семантическом пути для обозначения "внутренний счетчик "аккумулятор к следующему элементу массива. я вижу этонет команды PostgreSQL предложить прямой доступ к этому счетчику, Какgenerate_series()
функция,generate_subscripts()
функция являетсягенератор последовательностии производительность (лучше, но) примерно одинакова. С другой стороныrow_number()
Функция предлагает прямой доступ квнутренний счетчик рядов, но это о рядах,не о массивахи, к сожалению, производительность хуже.