So I have decided to begin work on a set of CPAN modules, essentially implementing the stored procedure interface work that I have done for LedgerSMB, and incorporating the lessons learned by myself and others. It is my hope that Perl programmers will find this useful in building sophisticated applications on PostgreSQL. The idea is to turn PostgreSQL into an encapsulated database sever with a discoverable API, and then allow programs to discover the API directly. In my experience this leads to more robust code because code contracts between stored procedures and applications are more readily enforcible.
I just got preliminary versions of two of them on CPAN. The first is PGObject which implements the database-facing routines, and PGObject::Simple which is developer-facing. The reason for breaking things off this way is to allow for multiple different developer-facing systems off the same backend-facing services. These are functional, but ones with a great deal more functionality are on their way.
I feel a need to justify "Simple" in the name of the latter. PGObject::Simple is a quick and dirty stored procedure mapping convention system based on our approach in LedgerSMB. It is not reduced in functionality, but the overall conventions are simple, and therefore require less overhead to use. This also means, however, that the flexibility is such that it requires a certain discipline to use effectively. Objects can quickly become amorphous but used with discipline it is a very powerful system.
For additional structure, PGObject::Simple::Role is under development which creates a Moo role, which can be used with or without Moose, to provide this sort of functionality in more formalized object systems.
These modules are designed to facilitate mapping of stored procedure functionality into applications, allowing PostgreSQL databases to become encapsulated intelligent information servers in their own right. In future posts I will be going over both of these in detail.
For now though start with the documentation in the links above.