Re: Access to current database from C-language function
От | David Fetter |
---|---|
Тема | Re: Access to current database from C-language function |
Дата | |
Msg-id | 20110801150458.GD7857@fetter.org обсуждение исходный текст |
Ответ на | Re: Access to current database from C-language function (Achim Domma <domma@procoders.net>) |
Ответы |
Re: Access to current database from C-language function
|
Список | pgsql-hackers |
On Mon, Aug 01, 2011 at 01:23:26PM +0200, Achim Domma wrote: > Am 26.07.2011 um 00:40 schrieb Florian Pflug: > > > On Jul25, 2011, at 22:31 , Achim Domma wrote: > >> Am 25.07.2011 um 14:48 schrieb Florian Pflug: > >>> A more low-level API is provided by > >>> {heap,index}_{beginscan,endscan}, heap_{insert,update,delete} > >>> and index_insert. However, correct handling of transactions > >>> using this API isn't easy - for example, to update a row you'd > >>> first have to find the latest version of that row, then decide > >>> if you're allowed to update it, and finally create a new > >>> version. > >> > >> I see the problems with the second approach, but that's > >> definitively what I would like to do. > > > > You're in for a lot of work, then. I still suggest that you > > explain your ultimate goals before you embark on your endeavor - > > people might be able to point our easier ways to achieve those. > > I have tables which store two integer IDs and a floating point rank. > So the table MyTable might have these columns: > > EntityID -> int PropertyID -> int Rank -> float > > My algorithm needs to retrieve EntityID-Rank-Pairs for some given > PropertyIDs. So I basically want to execute a "select EntityID, Rank > from MyTable where PropertyID=123 oder by Rank desc". But I need to > execute multiple of those statements and I don't want to load all > the data into memory, but rather iterate over the results step by > step, stopping at certain thresholds. > > My algorithm is somewhat nested and contains logic which I cannot > express in SQL, SQL is Turing-complete, so the chances are excellent that it's possible to express that algorithm in it. ;) Look into common table expressions for iteration/recursion, and windowing functions, commonly used for time series. http://www.postgresql.org/docs/current/static/queries-with.html http://www.postgresql.org/docs/current/static/tutorial-window.html Cheers, David. -- David Fetter <david@fetter.org> http://fetter.org/ Phone: +1 415 235 3778 AIM: dfetter666 Yahoo!: dfetter Skype: davidfetter XMPP: david.fetter@gmail.com iCal: webcal://www.tripit.com/feed/ical/people/david74/tripit.ics Remember to vote! Consider donating to Postgres: http://www.postgresql.org/about/donate
В списке pgsql-hackers по дате отправления: