Search Postgresql Archives

Re: [SQL] (Ab)Using schemas and inheritance

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jorge Godoy wrote:
Em Quarta 24 Maio 2006 13:06, Alban Hertroys escreveu:

Jorge Godoy wrote:

That's not what I showed above.  What I meant was:

CREATE TABLE base_schema.sample ();
CREATE TABLE client1_schema.sample () INHERITS FROM base_schema.sample;
ALTER TABLE client1_schema.sample RENAME TO client1_schema.sample_2004;
CREATE TABLE client1_schema.sample () INHERITS FROM base_schema.sample;
ALTER TABLE client1_schema.sample RENAME TO client1_schema.sample_2005;
...

So I'm always inheriting from the same base and I'm renaming the inherited tables, not the parent table.

Did you try this? It seems to be important.

I've done what I said, not what you said...  Does it look better this way?

It does; only 1 level of inheritence for every table, AOT growing inheritence.
There are some differences in behaviour too:

- Your method shows only data from one year in each table, so you'll need to query a different table to get historical information (probably the base tables, but that also includes data from other companies).

- The "growing inheritence" method would show old data in the newly created tables, unless you use the ONLY operator.

Your method will have better performance for the general case (querying current data), I think.

Considering this case with views, you could:

CREATE INDEX sample_2004_idx ON sample (object_id) WHERE date BETWEEN
'2004-01-01'::date AND '2004-12-31'::date;

CREATE INDEX sample_2005_idx ON sample (object_id) WHERE date BETWEEN
'2005-01-01'::date AND '2005-12-31'::date;

etc.

You could extend that to also take company_id into account and put the
indices on the base tables instead. I figure that takes less maintenance.

From what I did to this suggestion or from what you thought I was doing to this suggestion?

Neither; That's about the updatable views case.

For yearly archiving, dumping one of those inherited tables (containing
only data for a specific year, after all) could work. Never tried that
before.

If I'm removing this from the database, then I can dump it. If I rename it data will still be available for processing in the parent table while new data is inserted in the new table. When the time that I need to keep those records there expire, I can dump the table to some backup and remove it from the database, clearing space and eliminating unneeded tables.

Can't you just dump the client and year specific inherited table (client1_schema.sample_2004 for example)? That way you could just use pg_dump, provided it understands inheritence of course.

Hmm... thinking about this, I realize that in your case selecting all
data in a year could be faster. The planner would certainly choose a
sequential scan plan, while with all data in a single table (with views
over them) may trigger an index scan, which would probably be slower.

Depends on whether you're likely to do that, of course.

Probably not often, but if we have benefits here, I believe that those might also appear on small selects.

Only if a sequential scan is desirable over an index scan, meaning you're selecting almost all rows in your table.

The difference between an index scan over all data and an index scan over year-specific data should be pretty small.

Well, the data is inside those tables, where it's not with views. If you
accidentaly DROP a column in a table, the data is gone. With a view you
just don't see it anymore, but it's still there.

Indeed, but with inherited tables I have to DROP ... CASCADE;, what might trigger some advice to whoever is maintaining the database. But you're right on this. But I'm at the same risk dropping some column from the tables the views are derived from...

True, but with updatable views you have only one set of tables to take into account, instead of a set for every customer company. You can automate that to some extent, but it is more error prone - it involves human beings, after all ;)

One thing that comes to mind now is the timetravel contrib package.
That's another thing I plan to look into some time, but it may suit your
needs.

I'll take a look into it. I confess I don't even know what it does, but I'll check :-)


Thanks, Alban!

You're welcome.

--
Alban Hertroys
alban@xxxxxxxxxxxxxxxxx

magproductions b.v.

T: ++31(0)534346874
F: ++31(0)534346876
M:
I: www.magproductions.nl
A: Postbus 416
   7500 AK Enschede

// Integrate Your World //


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux