Improve efficiency of dblink by using libpq's new row processor API.
Tom Lane <tgl@sss.pgh.pa.us>
Improve efficiency of dblink by using libpq's new row processor API. This patch provides a test case for libpq's row processor API. contrib/dblink can deal with very large result sets by dumping them into a tuplestore (which can spill to disk) --- but until now, the intermediate storage of the query result in a PGresult meant memory bloat for any large result. Now we use a row processor to convert the data to tuple form and dump it directly into the tuplestore. A limitation is that this only works for plain dblink() queries, not dblink_send_query() followed by dblink_get_result(). In the latter case we don't know the desired tuple rowtype soon enough. While hack solutions to that are possible, a different user-level API would probably be a better answer. Kyotaro Horiguchi, reviewed by Marko Kreen and Tom Lane
Files
| Path | Change | +/− |
|---|---|---|
| contrib/dblink/dblink.c | modified | +354 −67 |
| doc/src/sgml/dblink.sgml | modified | +12 −8 |