Re: Pipelined functions in Postgres
- From: "Milen Kulev" <makulev(at)gmx(dot)net>
- To: "'Shoaib Mir'" <shoaibmir(at)gmail(dot)com>
- Cc: <pgsql-performance(at)postgresql(dot)org>
- Subject: Re: Pipelined functions in Postgres
- Date: Tue, 19 Sep 2006 23:22:15 +0200
- Message-id: <007b01c6dc31$ae395920$0a00a8c0(at)trivadis(dot)com>
Title: Nachricht
Hello
Shoaib,
I know
the SETOF funcitons. I want to simulate (somehow) producer/consumer
relationship with SETOF(pipelined) functions. The first
(producer )function generates records (just like your test_pipe function),
and the second function consumers the records , produced by the first
function. The second function can be rows/records producer for another consumer
functions e.g. it should looks like(or similar)
select
* from consumer_function( producer_function(param1, param2,
...));
What I
want to achieve is to impelement some ETL logic
in consumer_functions (they could be chained, of
course).
The
main idea is to read source DWH tables once (in producer_function,
for example), and to process the rowsets
in the
consumer functions. I want to avoid writing to intermediate tables
while performing ETL processing .
Is
this possible with SETOF functions
?
Best
Regards
Milen
I think
pipelined functions are code you can pretend is a database table.
For
example you can do it like this in Oracle:
select * from PLSQL_FUNCTION;
You can
achieve something similar in PostgreSQL using RETURN SETOF functions like
this:
CREATE OR REPLACE FUNCTION
test_pipe (int)
RETURNS SETOF RECORD AS
$$
DECLARE
v_rec RECORD;
BEGIN
FOR temp_rec IN (SELECT col FROM
table where col > 10)
LOOP
RETURN NEXT v_rec;
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql;
This function
can be called like this:
SELECT * FROM
test_pipe(10) AS tbl (col int);
Hope this
helps...
Thanks,
--
Shoaib Mir
EnterpriseDB (www.enterprisedb.com)
Home |
Main Index |
Thread Index