vBulletin Search Engine Optimization
| |||||||
| Register | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| Hi, In Postgres, is there a C language API which would give me access to BTrees like Berkeley DB does? eg to seek to a particular key/value pair and iterate forward from there? If not whats the nearest thing to this in Postgres? Cheers. |
| |||
| "Chad" <chadzakary@hotmail.com> wrote > > In Postgres, is there a C language API which would give me access to > BTrees like Berkeley DB does? eg to seek to a particular key/value pair > and iterate forward from there? AFAIK there is no such API for this purpose. The reason is that to access BTree, you have to setup complex enough environment to enable so. For example, the buffer pool support, the WAL support etc. So though exporting such API is easy to do, there is no pratical usage of it. Regards, Qingqing |
| |||
| On Thu, Feb 16, 2006 at 07:41:09AM -0800, Chad wrote: > In Postgres, is there a C language API which would give me access to > BTrees like Berkeley DB does? eg to seek to a particular key/value pair > and iterate forward from there? If not whats the nearest thing to this > in Postgres? Could you tell us about the problem you're trying to solve? Are you writing client-side or server-side code? -- Michael Fuhr ---------------------------(end of broadcast)--------------------------- TIP 2: Don't 'kill -9' the postmaster |
| |||
| On Fri, 2006-02-17 at 11:34 +0800, Qingqing Zhou wrote: > AFAIK there is no such API for this purpose. The reason is that to access > BTree, you have to setup complex enough environment to enable so. For > example, the buffer pool support, the WAL support etc. So though exporting > such API is easy to do, there is no pratical usage of it. Well, if the API is going to be invoked by C UDFs, it could assume that the environment has been appropriately initialized. I think it would be possible to provide such an API (although it would take a considerable amount of work). However, I don't see the point -- why would an application want to use the API? SQL is much more flexible. -Neil ---------------------------(end of broadcast)--------------------------- TIP 6: explain analyze is your friend |
| |||
| A long time ago, in a galaxy far, far away, neilc@samurai.com (Neil Conway) wrote: > On Fri, 2006-02-17 at 11:34 +0800, Qingqing Zhou wrote: >> AFAIK there is no such API for this purpose. The reason is that to access >> BTree, you have to setup complex enough environment to enable so. For >> example, the buffer pool support, the WAL support etc. So though exporting >> such API is easy to do, there is no pratical usage of it. > > Well, if the API is going to be invoked by C UDFs, it could assume that > the environment has been appropriately initialized. > > I think it would be possible to provide such an API (although it would > take a considerable amount of work). However, I don't see the point -- > why would an application want to use the API? SQL is much more flexible. It would probably make more sense to create an API that runs the activities via a translation into SQL... -- let name="cbbrowne" and tld="ntlug.org" in String.concat "@" [name;tld];; http://linuxdatabases.info/info/slony.html Rules of the Evil Overlord #46. "If an advisor says to me "My liege, he is but one man. What can one man possibly do?", I will reply "This." and kill the advisor." <http://www.eviloverlord.com/> |
| |||
| In a word: The kind of problems people use Berkeley DB for. People use BDB for more fine grained cursor access to BTrees. Stuff you CANNOT do with SQL. There is a market for this. See their website. I'd like something similar from Postgres so that the data would be stored in a full fledged RDBMS but I could use the cursor methods for searching more efficient than SQL. Best of both worlds. I've had a quick browse around the Postgres code and found some functions like "_bt_first()" but no sample code to use it. BTW its for developing an alternative server based access to the underlying relational data. |
| |||
| On Thu, Feb 16, 2006 at 07:41:09AM -0800, Chad wrote: > Hi, > > In Postgres, is there a C language API which would give me access to > BTrees like Berkeley DB does? eg to seek to a particular key/value pair > and iterate forward from there? If not whats the nearest thing to this > in Postgres? Well, in the backend you can do things like open a btree index, setup an ScanKey to indicate which values you want and then keep calling getnext(). If you set your scankey to (col1 >= 'A') it will start at 'A' and go up from there... Most of the time though you just create a query and use SPI_exec. Then you don't actually have to worry about details like names of the indexes, OIDs, types, comparison functions, etc... Have a nice day, -- Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/ > Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a > tool for doing 5% of the work and then sitting around waiting for someone > else to do the other 95% so you can sue them. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) iD8DBQFD9ZWAIB7bNG8LQkwRAo5iAJ9q1XqQ8GKkhunTYME/TjqErBh0dQCghCJ8 +ocvPcrv1KUucC9/tSs9Wc8= =+kag -----END PGP SIGNATURE----- |
| |||
| Thanks Martijn, This is exactly what I am looking for. I'm wondering how easy it is to sit on top of this backend. Does anybody have any stand alone sample code? Is it a library that can be linked or do you need to produce a modified version of the postgres server? Can it be used in shared library form and if so will it support multiple processes using it on the same machine? ---------------------- "Well, in the backend you can do things like open a btree index, setup an ScanKey to indicate which values you want and then keep calling getnext(). If you set your scankey to (col1 >= 'A') it will start at 'A' and go up from there... " |
| |||
| "Chad" <chadzakary@hotmail.com> writes: > This is exactly what I am looking for. I'm wondering how easy it is to > sit on top of this backend. You can't, and you'll get exactly zero community support for trying. We don't believe in embedded databases --- or at least, we don't believe in trying to use Postgres as one. We like a hard-and-fast separation between client and database server, so that client programming mistakes can't corrupt the database. You could possibly do what you are thinking of in the form of user-defined functions executing in the backend, but the communication overhead to the client side is likely more than you want, and you'll be relying on APIs that we consider backend-internal and feel free to whack around at the drop of a hat. I'd suggest looking for something that's actually intended to be an embedded database. sqlite maybe, though I'm no expert on the subject. For that matter, have you looked at good old dbm? regards, tom lane ---------------------------(end of broadcast)--------------------------- TIP 4: Have you searched our list archives? http://archives.postgresql.org |
| ||||
| On Fri, Feb 17, 2006 at 01:06:16AM -0800, Chad wrote: > In a word: The kind of problems people use Berkeley DB for. > > People use BDB for more fine grained cursor access to BTrees. Stuff you > CANNOT do with SQL. There is a market for this. See their website. I'd > like something similar from Postgres so that the data would be stored > in a full fledged RDBMS but I could use the cursor methods for > searching more efficient than SQL. Best of both worlds. Well, just the brief look at the docs doesn't immediatly reveal anything that couldn't be done with straight SQL and server side functions. It would be helpful if you could give an example of what you actually want to do. > I've had a quick browse around the Postgres code and found some > functions like "_bt_first()" but no sample code to use it. BTW its for > developing an alternative server based access to the underlying > relational data. Well, that function is several levels below where you need to be looking. Using it directly will probably get you into a world of hurt. BTW, what does "alternative server based access to the underlying relational data" mean? Have a nice day, -- Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/ > Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a > tool for doing 5% of the work and then sitting around waiting for someone > else to do the other 95% so you can sue them. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) iD8DBQFD9k0zIB7bNG8LQkwRAg99AJsEw+gMJd0Ri/JWfBBb80xfZqBIxwCaA97z X2GcoXvHrDZ+wLaUxfnFALo= =gJWn -----END PGP SIGNATURE----- |