Re: Materialized views WIP patch

From: Marko Tiikkaja <pgmail(at)joh(dot)to>
To: Kevin Grittner <kgrittn(at)mail(dot)com>
Cc: Pgsql Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Materialized views WIP patch
Date: 2012-11-26 00:30:09
Message-ID: 50B2B811.3060300@joh.to
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi Kevin,

On 15/11/2012 03:28, Kevin Grittner wrote:
> Attached is a patch that is still WIP but that I think is getting
> pretty close to completion.

I've been looking at this, but I unfortunately haven't had as much time
as I had hoped for, and have not looked at the code in detail yet. It's
also a relatively big patch, so I wouldn't mind another pair of eyes on it.

I have been testing the patch a bit, and I'm slightly disappointed by
the fact that it still doesn't solve this problem (and I apologize if I
have missed discussion about this in the docs or in this thread):

<assume "foo" is a non-empty materialized view>

T1: BEGIN;
T1: LOAD MATERIALIZED VIEW foo;

T2: SELECT * FROM foo;

T1: COMMIT;

<T2 sees an empty table>

As others have pointed out, replacing the contents of a table is
something which people have been wanting to do for a long time, and I
think having this ability would make this patch a lot better; now it
just feels like syntactic sugar.

> 1. CREATE MATERIALIZED VIEW syntax is stolen directly from CREATE
> TABLE AS, with all the same clauses supported. That includes
> declaring a materialized view to be temporary or unlogged.
> 2. MVs don't support inheritance.
> 3. MVs can't define foreign keys.
> 4. MVs can't be the target of foreign keys.
> 5. MVs can't have triggers.
> 6. Users can't create rules which reference MVs (although MVs
> [ab]use the rules mechanism internally, similar to how views do).
> 7. MVs can't be converted to views, nor vice versa.
> 8. Users may not directly use INSERT/UPDATE/DELETE on an MV.
> 9. MVs can't directly be used in a COPY statement, but can be the
> source of data using a SELECT.
> 10. MVs can't own sequences.
> 11. MVs can't be the target of LOCK statements, although other
> statements get locks just like a table.
> 12. MVs can't use data modifying CTEs in their definitions.
> 13. pg_class now has a relisvalid column, which is true if an MV is
> truncated or created WITH NO DATA. You can not scan a relation
> flagged as invalid.
> 14. ALTER MATERIALIZED VIEW is supported for the options that seemed
> to make sense. For example, you can change the tablespace or
> schema, but you cannot add or drop column with ALTER.
> 16. To get new data into the MV, the command is LOAD MATERIALIZED
> VIEW mat view_name. This seemed more descriptive to me that the
> alternatives and avoids declaring any new keywords beyond
> MATERIALIZED. If the MV is flagged as relisvalid == false, this
> will change it to true.
> 17. Since the data viewed in an MV is not up-to-date with the latest
> committed transaction, it didn't seem to make any sense to try to
> apply SERIALIZABLE transaction semantics to queries looking at
> the contents of an MV, although if LMV is run in a SERIALIZABLE
> transaction the MV data is guaranteed to be free of serialization
> anomalies. This does leave the transaction running the LOAD
> command vulnerable to serialization failures unless it is also
> READ ONLY DEFERRABLE.
> 18. Bound parameters are not supported for the CREATE MATERIALIZED
> VIEW statement.

I believe all of these points have been under discussion, and I don't
have anything to add to the ongoing discussions.

> 19. LMV doesn't show a row count. It wouldn't be hard to add, it just
> seemed a little out of place to do that, when CLUSTER, etc.,
> don't.

This sounds like a useful feature, but your point about CLUSTER and
friends still stands.

> In the long term, we will probably need to separate the
> implementation of CREATE TABLE AS and CREATE MATERIALIZED VIEW, but
> for now there is so little that they need to do differently it seemed
> less evil to have a few "if" clauses that that much duplicated code.

Seems sensible.

I'll get back when I manage to get a better grasp of the code.

Regards,
Marko Tiikkaja

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Peter Geoghegan 2012-11-26 00:36:31 Re: MySQL search query is not executing in Postgres DB
Previous Message Robert Haas 2012-11-26 00:24:26 Re: MySQL search query is not executing in Postgres DB