powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / хочу странного (множественные функции для ARRAY-ев)
1 сообщений из 1, страница 1 из 1
хочу странного (множественные функции для ARRAY-ев)
    #38588008
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потребовалось сделать индекс, по условию на содержимость в поле-массиве значения из наперед заданного подмножества, но с условием. (последний элемент в поле-массиве, такой, что есть в другом, заданном массиве -- удовлетворяет некоему условию).

написать условие -- написал, но поимел
ERROR: cannot use subquery in index predicate
(там только unnest-ы и select-ы от них, т.е. никаких внешних данных, всё иммутабно)

Получается, что надо писать свою функцию
например INTERSEC(from_array,in_array), возвращающую элементы from_array ,присутствующие в in_array (+ в порядке, в котором они есть в from_array)

т.к. все передачи параметров в postgres-sql/plpgsql очевидно идут по значению (как-то даже проверял), а не по ссылкам, хотелось бы иметь ф-ии типа такой INTERSEC(anyarray,anyarray) (и т.п., которые можно придумать, например union_arrays(anyarray,anyarray) , distinct_array[ordered] и т.п. уже реализованные в чем-то побыстрее .

конечно набросал ф-ю (уже извлекая последний, раз уж мне он только и нужен):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE OR REPLACE FUNCTION public.lastelement_by_array(from_array anyarray, in_array anyarray)
  RETURNS anyelement AS
$BODY$
	SELECT u FROM ( 
		SELECT u ,row_number() over() AS rn FROM unnest(from_array) u
		WHERE u =ANY (in_array)
		) foo
	ORDER BY rn DESC LIMIT 1;
	
$BODY$
  LANGUAGE sql IMMUTABLE SECURITY DEFINER  COST 100;
COMMENT ON FUNCTION public.lastelement_by_array(anyarray,anyarray) IS 'Возвращает последний элемент массива from_array, присутствующий в in_array';
-- test --
SELECT public.lastelement_by_array(ARRAY[17,37,NULL,7,6,7,1,1,1::int],ARRAY[6,7, 1,2,5]::int4[]) ;
--"Total runtime: 0.011 ms"



но хотелось бы тут понять, не упускаю ли я из виду что-то более шустрое, и уже реализованное "искаропки".
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / хочу странного (множественные функции для ARRAY-ев)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]