Обсуждение: Creation of a table with dynamic name from inside a pgpsql function

Поиск
Список
Период
Сортировка

Creation of a table with dynamic name from inside a pgpsql function

От
"Michael Beckstette"
Дата:
Hi,

i have tried to create a table with a name specified by a calling parameter of
a pgsql function. Something like this:
CREATE FUNCTION test (varchar) RETURNS TEXT AS '
DECLAREtable_name ALIAS FOR $1;query_string varchar;

BEGIN
query_string:= ''CREATE TABLE temp1 AS SELECT * FROM ''||
quote_ident(table_name) || '' WHERE (hsp_rank=1 AND hsp_evalue<=0.001)'';
RAISE NOTICE ''Query: %'',query_string;
EXECUTE query_string;
RETURN table_name;
END;
' LANGUAGE 'plpgsql';

with the following result:

prod2_db=# select test('blasthits_obj_174_q122_db123');
NOTICE:  Query: CREATE TABLE temp1 AS SELECT * FROM
blasthits_obj_174_q122_db123 WHERE (hsp_rank=1 AND hsp_evalue<=0.001)
ERROR:  EXECUTE of SELECT ... INTO is not implemented yet
prod2_db=#

i read in the docs, that an SELECT INTO is not fully supported, but how can i
solve this problem ? Any idea or workaround ?

Regards
Michael Beckstette


Re: Creation of a table with dynamic name from inside a pgpsql function

От
Tom Lane
Дата:
"Michael Beckstette" <mbeckste@TechFak.Uni-Bielefeld.DE> writes:
> query_string:= ''CREATE TABLE temp1 AS SELECT * FROM ''||
> quote_ident(table_name) || '' WHERE (hsp_rank=1 AND hsp_evalue<=0.001)'';
> RAISE NOTICE ''Query: %'',query_string;
> EXECUTE query_string;

> prod2_db=# select test('blasthits_obj_174_q122_db123');
> NOTICE:  Query: CREATE TABLE temp1 AS SELECT * FROM
> blasthits_obj_174_q122_db123 WHERE (hsp_rank=1 AND hsp_evalue<=0.001)
> ERROR:  EXECUTE of SELECT ... INTO is not implemented yet

Update to 7.2.1.  The above should be allowed, but was mistakenly
rejected by 7.2.
        regards, tom lane