CREATE OR REPLACE FUNCTION function2( p_tn text ) RETURNS SETOF record AS $body$ DECLARE p_sql TEXT; BEGIN p_sql := 'SELECT * FROM '||p_tn||';'; RETURN QUERY EXECUTE(p_sql); /* test show, what RETURN QUERY EXECUTE(p_sql); or FOR p_record IN EXECUTE(p_sql) LOOP RETURN NEXT p_record; END LOOP; not have sign. */ EXCEPTION WHEN DATA_EXCEPTION OR SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION THEN RAISE WARNING 'sh1'; RAISE WARNING 'sh2'; RAISE WARNING 'sh3'; RAISE WARNING 'sh4'; RAISE EXCEPTION 'TEST1'; WHEN INTEGRITY_CONSTRAINT_VIOLATION THEN RAISE WARNING 'sh1'; RAISE WARNING 'sh2'; RAISE WARNING 'sh3'; RAISE WARNING 'sh4'; RAISE EXCEPTION 'TEST1'; END; $body$ LANGUAGE 'plpgsql' STABLE CALLED ON NULL INPUT SECURITY DEFINER COST 100 ROWS 1000; CREATE TABLE test1 ( id BIGSERIAL NOT NULL, name TEXT, description TEXT, document_date TIMESTAMP WITHOUT TIME ZONE DEFAULT now(), oper_type SMALLINT DEFAULT 1 NOT NULL, ua UUID[], tst BIGINT[], CONSTRAINT test_pkey PRIMARY KEY(id) ) WITHOUT OIDS; CREATE INDEX test1_idx ON test1 USING btree ((cast_int_to_text(tst))); CREATE INDEX test1_idx1 ON test1 USING gin ((to_tsvector('russian'::regconfig, name))); -- insert into test1 ~10000 rows (any table, for example this) SELECT * FROM sh_test.function2('test1') AS T( id BIGINT, name TEXT, description TEXT, document_date TIMESTAMP, oper_type SMALLINT, ua UUID[], tst BIGINT[] ); WARNING: temporary file leak: File 46 still referenced CONTEXT: PL/pgSQL function "function2" line 3 during statement block exit ERROR: tuplestore seek failed SELECT version() PostgreSQL 8.4.2, compiled by Visual C++ build 1400, 32-bit Windows XP SP 3, 4.0 GB RAM, INTEL Q8300, 2.5 GGz postgresql.conf shared_buffers = 256MB # min 128kB work_mem = 2MB # min 64kB