[Zope-dev] Fw: object features of PostgreSQL
Michel Pelletier
michel@digicool.com
Fri, 22 Oct 1999 12:36:17 -0400
This is a really interesting message found on the Byte magazine
discussions for anyone who ever thought about implimenting a Postgres
storage for Zope.
-Michel
robin <robin@nospam.org> wrote in message
news:<7u0kr7$st4$1@cmpweb-media0.web.cerf.net>...
>
> Jon Udell <udell@monad.net> wrote in message
> news:380367CF.7AAB0D90@monad.net...
> > > What features does DB2 have which make it an ODBMS?
> >
> > I'm not sure.
> >
> > But...can you tell us more about the object features of PostgreSQL,
and
> > how you're using them?
> >
> > Jon Udell
>
> PostgreSQL adds an "inherits" clause to the CREATE TABLE statement, so
an
> unimaginative example would be:
>
> create table people
> ( forename text, surname text, initials text, email text );
>
> create table staff
> ( office text, extension text ) inherits (people);
>
> create table clients
> ( organisation oid ) inherits (people);
>
> This would create three tables, people, with fields; forename,
surname,
> initials, email, staff; with fields forename, surname, initials,
email,
> office and extension, and clients; with fields forename, surname,
initials,
> email and organisation.
>
> Queries can then be made on any of the tables individually in the
normal
> way, but also using an extension syntax:
>
> select * from table people*;
>
> Which would query table people, and all tables which inherit from it.
In
> fact the Postgres documentation makes reference to "classes" instead
of
> tables. Clearly a query such as this can only return the fields which
are
> common to all of the tables in the hierarchy, i.e. the fields of the
base
> class.
>
> I have used this feature with Perl to implement a simple object
persistence
> veneer above DBI. I create a base class called object to start the
> hierarchy;
>
> create table object (class text default 'object');
>
> and then further classes are like this;
>
> create table people (class text default 'people',
> forename text, surname text, initials text, email text );
>
> etc.
>
> The "class text default '<class name>'" field results in every row
having
> the name of the table it was entered into associated with it.
PostgreSQL
> also assigns a unique OID to every row in the database, so using the
people
> example, I can do "select *,oid from people*", retrieve the results
using
> fetchrow_hashref and then bless the rows with the contents of their
own
> class field.
>
> The result is a list of perl objects, each of the appropriate type.
The
> perl classes can in turn inherit from a base dbobject class which can
> generate the correct insert code automatically.
>
> This is how I handled object persistence in a number of web based
> applications for written for clients of my previous employer. I've
changed
> jobs, and expect to be working in Java, probably with DB2 and
Websphere. I
> know little about DB2, except that it's been called an "ORDBMS", and I
> wondered what the term is referring to.
>
> --
>
> -Robin Barooah
> robin(at)sublime.org
>
>