unnest(composite_type[])

VanillaNInja
Дата: 23.04.2015 14:11:57
Никак не пойму, как можно работать с массивами композитных типов

Хочу сделать unnest, а потом вытащить по полю значение, а не получается :-/

[SQL]BEGIN;

drop type if exists typing_resources_test;
CREATE  TYPE typing_resources_test AS (
	resource_id integer,
	group_id integer
);

-- plpgsql:
DO
$$
DECLARE
	_resources typing_resources_test[];
BEGIN
	
	
	_resources[0]:=(1,2)::typing_resources_test;
	_resources[1]:=(3,4)::typing_resources_test;
	RAISE NOTICE ' %' , (select resource_id from (select unnest(_resources))x where group_id= 4  );
	--


END;
$$;

NOTICE:  type "typing_resources_test" does not exist, skipping

[Err] ERROR:  column "resource_id" does not exist
LINE 1: SELECT (select resource_id from (select unnest(_resources))x...
                       ^
QUERY:  SELECT (select resource_id from (select unnest(_resources))x where group_id= 4  )
CONTEXT:  PL/pgSQL function inline_code_block line 9 at RAISE


посоветуйте ,как это лучше провернуть, пжл?
qwwq
Дата: 23.04.2015 14:17:55
VanillaNInja,

+ а так ?
BEGIN;

drop type if exists typing_resources_test;
CREATE  TYPE typing_resources_test AS (
	resource_id integer,
	group_id integer
);

-- plpgsql:
DO
$$
DECLARE
	_resources typing_resources_test[];
BEGIN
	
	
	_resources[0]:=(1,2)::typing_resources_test;
	_resources[1]:=(3,4)::typing_resources_test;
	RAISE NOTICE ' %' , (select resource_id from (select * FROM unnest(_resources)) x where group_id= 4  );
	--


END;
$$;
rollback;
Maxim Boguk
Дата: 23.04.2015 14:20:27
VanillaNInja,

- 	RAISE NOTICE ' %' , (select resource_id from (select unnest(_resources))x where group_id= 4  );
+ RAISE NOTICE ' %' , (select resource_id from (select * FROM unnest(_resources))x where group_id= 4);


--
Maxim Boguk
www.postgresql-consulting.ru
VanillaNInja
Дата: 23.04.2015 14:35:37
Читая магия! Работает!
Спасибо вам большое еще раз!