Hi all -
I'm currently wrestling with generating XML output from a table that has grown
to a size where simply using table_to_xml or query_to_xml is no longer feasible
due to the whole result set getting loaded into memory. I've been getting
familiar with cursors and the cursor_to_xml command and have two issues that I
can't seem to figure out:
1) When using cursor_to_xml in a plpgsql function, the FOUND variable does not
seem to get set, so there is no way to exit a loop that is iterating over the
cursor. Below is the function code; it loops indefinitely when it is run.
create or replace function getxml() returns setof xml as $$
declare
resultxml xml;
curs refcursor;
begin
open curs for select * from groups;
loop
select cursor_to_xml(curs,1000, false, false, '') into resultxml;
return next resultxml;
exit when not found;
end loop;
end;
$$ language plpgsql;
2) Assuming the above issue is fixed, how can I go about ensuring that the
result set from the function isn't stored in memory until the function
completes? Ideally, I'd like to write the output to a file with each iteration
of the cursor, but I know file IO is a big no-no with plpgsql since
transactions can't manage the state of files being written.
Any insight is most appreciated. Thanks!
--
Sent via pgsql-general mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general