Re: IMMUTABLE columns in tables?

From: Adrian von Bidder <avbidder(at)fortytwo(dot)ch>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: IMMUTABLE columns in tables?
Date: 2010-06-15 19:03:21
Message-ID: 201006152103.22465@fortytwo.ch
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Tuesday 15 June 2010 18.56:46 Craig Ringer wrote:

[IMMUTABLE columns]

> Column privs may be bypassed by a superuser

To be fair, constraints can be removed via ALTER TABLE, so this is not an
argument.

For me, the compelling reason to propose this is that it's much more
readable than either triggers or GRANTs. It may be more efficient at
runtime as well, but (i) this is just speculation and (ii) it has to be
weighed against the small cost even in cases it is not used, and the cost of
maintaining the additional code paths.

Chris:
> - What do other databases use as syntax for this?

Either my Google skills are lacking, or none of Oracle, MySQL, Sybase or MS
SQL does currently implement such a thing.

There is a proposal from 2008 for MS SQL:
http://connect.microsoft.com/SQLServer/feedback/details/346200
Whis is essentially identical to my proposal in its first part (IMMUTABLE as
a regular constraint) and adds an extension of the form "IMMUTABLE WHEN
condition" where condition is probably anything that would also be valid as
a check contstraint.

I think the latter part is probably too complicated and opens too many gray
areas (it's not IMMUTABLE if I just can UPDATE to invalidate condition,
change my "immutable" column, and update again to undo the first change...)

The only extension I think might be useful is IMMUTABLE WHEN NOT NULL, which
would allow the row to be unset on INSERT and later be frozen.

Another question opened in that MS SQL change request: should rows with
IMMUTABLE values be allowed to be deleted? Judgement call, personally, I
think that immutability and DELETE rights have nothing to do with each other
(I imagined use primarily to protect the "id" column against [accidential?]
modification.)

> - Does SQL standard have anything to say about how this sort
> of thing ought to be declared?

It appears that at least the SQL 2008 standard is not available for free.
If it were in SQL92 or whatever, I'd expect it to be already implemented,
but admitttedly I did not check these standards.

thanks for the feedback!
-- vbi

--
This is what open source software is all about: creating knockoffs and
giving them away, destroying the value of whatever the other guy is
selling.
-- Danyel Lyons, Forbes

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Stefan Kaltenbrunner 2010-06-15 19:25:15 Re: Problem serving one-click installer to Syria
Previous Message Josh Berkus 2010-06-15 18:55:03 Re: Problem serving one-click installer to Syria