Hi everybody,
I am new PostgreSQL c function programmer. I'm trying to move ahead
a new "PostgreSQL routing library" (http://www.pgroute.org [for now, the
page in only in spanish]).

The point:
There is some way to keep objects in [persisten] memory and then refer
to these from c functions?. In the current version of pgRoute, each
transaction load the graph in memory (using MemoryContext), this isn't a
enterprise solution for routing program. Why I Wish is using a c
function to load the graph in memory [persistent], something like:

SELECT pgr_load_graph('my SQL graph sentence', 'graph name');
example: SELECT pgr_load_graph('SELECT id, source, target,
cost1,cost2,costn,... FROM edge_table WHERE ...','My graph');
would also have a function to unload or delete.

and then, use other function to calculating the shortest path, something
like:
SELECT pgr_get_shortest_path('from','to','cost
column','algorithm','graph name');
example: SELECT
pgr_get_shortest_path(6000,5142,'cost1','dijkstra','My graph');


researching in the PostgreSQL source code I found
"postgresql-8.4.0/src/backend/utils/mmgr/README.TXT", and I think the
indicated MemoryContext that I need to solved my problem is
"TopMemoryContext", but I don't found examples of how can I used it.

I need some guidelines, or way to resolved this. Is posible to put
persisten object in memory through postgresql c funtion?, or my idea is
a crazy idea?

Thanks a lot for your time and answers, ahhh! and for my English writing.

Search Discussions

  • Peter Eisentraut at Sep 2, 2009 at 6:30 pm

    On ons, 2009-09-02 at 10:59 -0430, Christian Gonzalez wrote:
    Is posible to put
    persisten object in memory through postgresql c funtion?
    Well, the PL/Perl and PL/Python languages do some variants of this using
    their GD and SD variables. So it's surely possible in C as well.
    Memory contexts are the right keyword, but note that if you use
    TopMemoryContext, you are pretty much just using malloc(). Maybe you
    want to try prototyping your functionality in PL/Perl or PL/Python to
    get it started.
  • Andrew Dunstan at Sep 2, 2009 at 7:17 pm

    Peter Eisentraut wrote:
    On ons, 2009-09-02 at 10:59 -0430, Christian Gonzalez wrote:

    Is posible to put
    persisten object in memory through postgresql c funtion?
    Well, the PL/Perl and PL/Python languages do some variants of this using
    their GD and SD variables. So it's surely possible in C as well.
    Memory contexts are the right keyword, but note that if you use
    TopMemoryContext, you are pretty much just using malloc(). Maybe you
    want to try prototyping your functionality in PL/Perl or PL/Python to
    get it started.

    But if you want something visible to all sessions, something like
    pg_memcache might be what you need. see
    <http://cvs.pgfoundry.org/cgi-bin/cvsweb.cgi/~checkout~/pgmemcache/pgmemcache/README.pgmemcache?rev=1.11>
    for some details.

    cheers

    andrew
  • Christian Gonzalez at Sep 2, 2009 at 7:37 pm
    Ohh Thanks to all for your answers,
    pgmemcache does exactly what I need, or how I need it, that is to
    put my graph into a persistent memory for all transactions that have
    permissions.

    Thanks again,
    Christian Gonzalez

    El 02/09/09 14:47, Andrew Dunstan escribió:

    Peter Eisentraut wrote:
    On ons, 2009-09-02 at 10:59 -0430, Christian Gonzalez wrote:
    Is posible to put persisten object in memory through postgresql c
    funtion?
    Well, the PL/Perl and PL/Python languages do some variants of this using
    their GD and SD variables. So it's surely possible in C as well.
    Memory contexts are the right keyword, but note that if you use
    TopMemoryContext, you are pretty much just using malloc(). Maybe you
    want to try prototyping your functionality in PL/Perl or PL/Python to
    get it started.

    But if you want something visible to all sessions, something like
    pg_memcache might be what you need. see
    <http://cvs.pgfoundry.org/cgi-bin/cvsweb.cgi/~checkout~/pgmemcache/pgmemcache/README.pgmemcache?rev=1.11>
    for some details.

    cheers

    andrew
  • Robert Haas at Sep 2, 2009 at 7:13 pm

    On Wed, Sep 2, 2009 at 11:29 AM, Christian Gonzalezwrote:
    The point:
    There is some way to keep objects in [persisten] memory and then refer to
    these from c functions?.  In the current version of pgRoute, each
    transaction load the graph in memory (using MemoryContext), this isn't a
    enterprise solution for routing program.  Why I Wish is using a c function
    to load the graph in memory [persistent], something like:
    Well note that whatever you allocate in TopMemoryContext (or wherever)
    is going to be private to a single backend. If it's shared data, you
    probably want to put it in a table, I would think...

    ...Robert

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppgsql-hackers @
categoriespostgresql
postedSep 2, '09 at 3:34p
activeSep 2, '09 at 7:37p
posts5
users4
websitepostgresql.org...
irc#postgresql

People

Translate

site design / logo © 2021 Grokbase