Re: Why does an ON SELECT rule have to be named "_RETURN"?

From: Stephan Szabo <sszabo(at)megazone(dot)bigpanda(dot)com>
To: Ken Winter <ken(at)sunward(dot)org>
Cc: 'Tom Lane' <tgl(at)sss(dot)pgh(dot)pa(dot)us>, 'PostgreSQL pg-general List' <pgsql-general(at)postgresql(dot)org>
Subject: Re: Why does an ON SELECT rule have to be named "_RETURN"?
Date: 2006-02-13 04:38:38
Message-ID: 20060212203110.R4934@megazone.bigpanda.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Sun, 12 Feb 2006, Ken Winter wrote:

> > -----Original Message-----
> > From: Stephan Szabo [mailto:sszabo(at)megazone(dot)bigpanda(dot)com]
> > Sent: Sunday, February 12, 2006 8:47 PM
> > To: Ken Winter
> > Cc: 'Tom Lane'; 'PostgreSQL pg-general List'
> > Subject: Re: [GENERAL] Why does an ON SELECT rule have to be named
> > "_RETURN"?
> >
> > On Sun, 12 Feb 2006, Ken Winter wrote:
> >
> > > Hi Tom ~
> > >
> > > You're right: I appealed to the PostgreSQL folks rather than the client
> > > tool builders. I did so because my guess is that the latter have a
> > harder
> > > row to hoe: They have to figure out whether a view really IS updatable
> > -
> > > most presumably aren't, so if they provide forms that offer to update
> > views,
> > > most of the time these forms are going to crash. It seems harder for
> > the
> > > client tool builders to figure out the updatability question than for
> > > PostgreSQL to let people (like me) do the "real table with ON SELECT"
> > trick
> > > and take responsibility for making it work. I don't see why that is
> > > inherently "broken".
> >
> > What does a "real table with ON SELECT" mean?
>
> It means a table that, due to the rules on it, works exactly like a view
> (from the client's perspective). (Here, let me call it a view-table.) No
> row ever gets inserted into the view-table. The rules deflect inserts into
> one or more base tables. Updates and deletes, though from the client's view
> they modify or remove rows in the view-table, actually update and delete in
> the underlying base tables.

How is this different from a view with on insert, on update and on delete
rules right now?

> > For example, if a row is
> > "inserted" that doesn't come into the on select output, was a row
> > inserted?
>
> In what I'm doing, that would not happen. But there might be a case where
> someone would want a design where rows inserted through the view-table,
> though they do get inserted into the underlying base tables, would not be
> visible through SELECT actions on the view-table. I can't imagine offhand
> why anyone would want to do this, but I don't see why PostgreSQL should stop
> them. (...Actually, on second thought, I have thought of doing a trick like
> this myself, to get around the PostgreSQL constraint I'm complaining about:
> Define a view-table with all of the update rules on it, so no rows ever get
> inserted into it but my client tools can do updates against it; then define
> a second, read-only, view for SELECTs to reveal the data entered through the
> first view. Right; I would rather not stoop to this.)
>
> > Can it cause unique key violations, can it satisfy a foreign key
> > constraint?
>
> PK, UK, FK, and check constraints would all be defined on the base tables,
> not on the view-table. So actions on the view-table would satisfy or
> violate these constraints, like any other actions redirected through
> PostgreSQL update rules.

But then this "view-table" isn't really a real table. If it's not a
real table, it pretty much defeats the original stated argument of having
"real tables with on select rules".

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message A Gattiker 2006-02-13 04:59:21 "out of shared memory error" with temp tables
Previous Message Ken Winter 2006-02-13 04:27:25 Re: Why does an ON SELECT rule have to be named "_RETURN"?