I recently worked on rewriting a fairly complex Berkeley DB based system using Postgres DB. Following is a wish list and a brief explanation for each of those items for postgres. It is not necessarily a comparison of postgres functionality with that of Berkeley DB but some required useful functionality currently lacking in postgres. I would like to have some feedback, comments, suggestions regarding these.
* Shared memory based connectivity: As such postgres has client - server model. The TCP-IP nature of its connectivity further adds to the latency of this communication. It will be nice to have a shared memory based connectivity between libpq front end and the back end. * Extended SQL functionality o Unsigned data types: It would be nice to have native support for unsigned flavor of simple data types (e.g. integer) o Nested transaction funtionality: I followed quite a few discussions stating postgres considering it at some time but later abandoning it due to some complexity. The "savepoints" are also believed to provide similar semantics. However it is useful and handy to have the simple nested transaction syntax and functionality. * Cursors o It would be useful to have updateable cursors. Otherwise the application is required to figure out a required INSERT versus UPDATE amongst other things. o Berkeley DB has various positioning (e.g. DB_SET_RANGE ) as well as operational (e.g. DB_NOOVERWRITE) options in its cursors. Postgres can provide such functionality (e.g. using underlying btree for an index to give DB_SET_RANGE like positioning) very easily. * Configurable error handling control: in case of fatal errors the transaction is aborted by default. It would be useful to make some configurable options available for the application to control the error handling in such situations. Berkeley DB has an option where all the exceptions can be turned off and the system returns only error codes which are then required to be handled by the application. Thanks, Sameer