]> granicus.if.org Git - postgresql/commitdiff
Add pg_upgrade TODO.detail.
authorBruce Momjian <bruce@momjian.us>
Sat, 4 Jun 2005 23:33:17 +0000 (23:33 +0000)
committerBruce Momjian <bruce@momjian.us>
Sat, 4 Jun 2005 23:33:17 +0000 (23:33 +0000)
doc/TODO.detail/pg_upgrade [new file with mode: 0644]

diff --git a/doc/TODO.detail/pg_upgrade b/doc/TODO.detail/pg_upgrade
new file mode 100644 (file)
index 0000000..953413a
--- /dev/null
@@ -0,0 +1,615 @@
+From pgsql-hackers-owner+M59479@postgresql.org Thu Sep 30 15:55:23 2004
+Return-path: <pgsql-hackers-owner+M59479@postgresql.org>
+Received: from svr1.postgresql.org (svr1.postgresql.org [200.46.204.71])
+       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id i8UJtHw26165
+       for <pgman@candle.pha.pa.us>; Thu, 30 Sep 2004 15:55:19 -0400 (EDT)
+Received: from localhost (unknown [200.46.204.144])
+       by svr1.postgresql.org (Postfix) with ESMTP id A4BDD32A219
+       for <pgman@candle.pha.pa.us>; Thu, 30 Sep 2004 20:55:10 +0100 (BST)
+Received: from svr1.postgresql.org ([200.46.204.71])
+       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
+       with ESMTP id 24195-05 for <pgman@candle.pha.pa.us>;
+       Thu, 30 Sep 2004 19:55:08 +0000 (GMT)
+Received: from postgresql.org (svr1.postgresql.org [200.46.204.71])
+       by svr1.postgresql.org (Postfix) with ESMTP id 537C532A216
+       for <pgman@candle.pha.pa.us>; Thu, 30 Sep 2004 20:55:10 +0100 (BST)
+X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
+Received: from localhost (unknown [200.46.204.144])
+       by svr1.postgresql.org (Postfix) with ESMTP id 333B932A1EF
+       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>; Thu, 30 Sep 2004 20:49:20 +0100 (BST)
+Received: from svr1.postgresql.org ([200.46.204.71])
+       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
+       with ESMTP id 21793-04
+       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>;
+       Thu, 30 Sep 2004 19:49:09 +0000 (GMT)
+Received: from authenticity.encs.concordia.ca (authenticity-96.encs.concordia.ca [132.205.96.93])
+       by svr1.postgresql.org (Postfix) with ESMTP id BEB6A32A156
+       for <pgsql-hackers@postgresql.org>; Thu, 30 Sep 2004 20:49:03 +0100 (BST)
+Received: from haida.cs.concordia.ca (IDENT:mokhov@haida.cs.concordia.ca [132.205.64.45])
+       by authenticity.encs.concordia.ca (8.12.11/8.12.11) with ESMTP id i8UJn0Xe022202;
+       Thu, 30 Sep 2004 15:49:00 -0400
+Date: Thu, 30 Sep 2004 15:49:00 -0400 (EDT)
+From: "Serguei A. Mokhov" <mokhov@cs.concordia.ca>
+To: pgsql-hackers@postgresql.org
+cc: "Serguei A. Mokhov" <mokhov@cs.concordia.ca>
+Subject: [HACKERS] pg_upgrade project: high-level design proposal of in-place upgrade
+       facility
+Message-ID: <Pine.LNX.4.58.0409301532390.4685@haida.cs.concordia.ca>
+MIME-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+X-Virus-Scanned: by amavisd-new at hub.org
+X-Mailing-List: pgsql-hackers
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by amavisd-new at hub.org
+X-Spam-Checker-Version: SpamAssassin 2.61 (1.212.2.1-2003-12-09-exp) on 
+       candle.pha.pa.us
+X-Spam-Status: No, hits=-4.9 required=5.0 tests=BAYES_00 autolearn=ham 
+       version=2.61
+Status: OR
+
+Hello dear all,
+
+[Please CC your replies to me as I am on the digest mode]
+
+Here's finally a very high-level design proposal of the pg_upgrade feature
+I was handwaiving a couple of weeks ago. Since, I am almost done with the
+moving, I can allocate some time for this for 8.1/8.2.
+
+If this topic is of interest to you, please read on until the very end
+before flaming or bashing the ideas out.  I had designed that thing and
+kept updating (the design) more or less regularly, and also reflected some
+issues from the nearby threads [1] and [2].
+
+This design is very high-level at the moment and is not very detailed.  I
+will need to figure out more stuff as I go and design some aspects in
+finer detail.  I started to poke around asking for initdb-forcing code
+paths in [3], but got no response so far.  But I guess if the general idea
+or, rather, ideas accepted I will insist on more information more
+aggressively :) if I can't figure something out for myself.
+
+[1] http://archives.postgresql.org/pgsql-hackers/2004-09/msg00000.php
+[2] http://archives.postgresql.org/pgsql-hackers/2004-09/msg00382.php
+[3] http://archives.postgresql.org/pgsql-hackers/2004-08/msg01594.php
+
+Comments are very welcome, especially _*CONSTRUCTIVE*_...
+
+Thank you, and now sit back and read...
+
+CONTENTS:
+=========
+
+1. The Need
+1. Utilities and User's View of the pg_upgrade Feature
+2. Storage Management
+   - Storage Managers and the smgr API
+3. Source Code Maintenance Aspects
+2. The Upgrade Sequence
+4. Proposed Implementation Plan
+   - initdb() API
+   - upgrade API
+
+
+1. The Need
+-----------
+
+It's been a problem for PG for quite awhile now to have a less painful
+upgrade procedure with every new revision of PostgreSQL, so the
+dump/restore sequence is required.  That can take a while for a production
+DB, while keeping it offline.  The new replication-related solutions, such
+as Slony I, pg_pool, and others can remedy the problem somewhat, but
+require to roughly double the storage requirements of a given database
+while replicating from the older server to a newer one.
+
+The proposed implementation of an in-server pg_upgrade facility attempts
+to address both issues at the same time -- a possibility to keep the
+server running and upgrading lazily w/o doubling the storage requirements
+(there will be some extra disk space taken, but far from doubling the
+size).  The in-process upgrade will not take much of down time and won't
+require that much memory/disk/network resources as replication solutions
+do.
+
+
+Prerequisites
+-------------
+
+Ideally, the (maybe not so anymore) ambitious goal is to simply be able to
+"drop in" the new binaries of the new server and kick off on the older
+version of data files. I think is this feasible now a lot more than before
+since we have those things available, which should ease up the
+implementation:
+
+  - bgwriter
+  - pg_autovacuum (the one to be integrated into the backend in 8.1)
+  - smgr API for pluggable storage managers
+  - initdb in C
+  - ...
+
+initdb in C, bgwriter and pg_autovacuum, and pluggable storage manager
+have made the possibility of creation of the Upgrade Subsystem for
+PostgreSQL to be something more reasonable, complete, feasible, and sane
+to a point.
+
+
+Utilities and the User's (DBA) View of the Feature
+--------------------------------------------------
+
+Two instances exist:
+
+   pg_upgrade (in C)
+
+       A standalone utility to upgrade the binary on-disk format from one
+       version to another when the database is offline.
+       We should always have this as an option.
+       pg_upgrade will accept sub/super set of pg_dump(all)/pg_restore
+       options that do not require a connection. I haven't
+       thought through this in detail yet.
+
+   pg_autoupgrade
+
+       a postgres subprocess, modeled after bgwriter and pg_autovacuum
+       daemons.  This will work when the database system is running
+       on old data directory, and lazily converting relations to the new
+       format.
+
+pg_autoupgrade daemon can be triggered by the following events in addition
+to the lazy upgrade process:
+
+   "SQL" level: UPGRADE <ALL | relation_name [, relation_name]> [NOW | time]
+
+While the database won't be offline running over older database files,
+SELECT/read-only queries would be allowed using older storage managers*.
+Any write operation on old data will act using write-invalidate approach
+that will force the upgrade the affected relations to the new format to be
+scheduled after the relation-in-progress.
+
+(* See the "Storage Management" section.)
+
+Availability of the relations while upgrade is in progress is likely to be
+the same as in VACUUM FULL for that relation, i.e. the entire relation is
+locked until the upgrade is complete.  Maybe we could optimize that by
+locking only particular pages of relations, I have to figure that out.
+
+The upgrade of indices can be done using REINDEX, which seems far less
+complicated than trying to convert its on-disk representation.  This has
+to be done after the relation is converted.  Alternatively, the index
+upgrade can simply be done by "CREATE INDEX" after the upgrade of
+relations.
+
+The relations to be upgraded are ordered according to some priority, e.g.
+system relations being first, then user-owned relations.  System relations
+upgrade is forced upon the postmaster startup, and then user relations are
+processed lazily.
+
+So, in a sense, pg_autoupgrade will act like a proxy choosing appropriate
+storage manager (like a driver) between the new server and the old data
+file upgrading them on-demand.  For that purpose we might need to add a
+pg_upgradeproxy to intercept backend requests and use appropriate storage
+manager.  There will be one proxy process per backend.
+
+
+Storage Management
+==================
+
+Somebody has made a possibility to plug a different storage manager in
+postgres and we even had two of them at some point . for the magnetic disk
+and the main memory.  The main memory one is gone, but the smgr API is
+still there.  Some were dubious why we would ever need another third-party
+storage manager, but here I propose to "plug in" storage managers from the
+older Postgres versions itself!  Here is where the pluggable storage
+manager API would be handy once fully resurrected.  Instead of trying to
+plug some third party storage managers it will primarily be used by the
+storage managers of different versions of Postgres.
+
+We can take the storage manager code from the past maintenance releases,
+namely 6.5.3, 7.0.3, 7.1.3, 7.2.5, 7.3.7, 7.4.5, and 8.0, and arrange them
+in appropriate fashion and have them implement the API properly.  Anyone
+can contribute a storage manager as they see fit, there's no need to get
+them all at once.  As a trial implementation I will try to do the last
+three or four maybe.
+
+
+Where to put relations being upgraded?
+--------------------------------------
+
+At the beginning of the upgrade process if pg detects the old version of
+data files, it moves them under $PGDATA/<ver>, and keeps the old relations
+there until upgraded.  The relations to be upgraded will be kept in the
+pg_upgrade_catalog.  Once all relations upgraded, the <ver> directory is
+removed and the auto and proxy processes are shut down.  The contents of
+the pg_upgrade_catalog emptied.  The only issue remains is how to deal
+with tablespaces (or LOCATION in 7.* releases) elsewhere .- this can
+probably be addressed in the similar fashion, but having a
+/my/tablespace/<ver> directory.
+
+Source Code Maintenance
+=======================
+
+Now, after the above some of you may get scared on the amount of similar
+code to possibly maintain in all those storage managers, but in reality
+they would require as much maintenance as the corresponding releases do
+get back-patched in that code area, and some are not being maintained for
+quite some time already.  Plus, I should be around to maintain it, should
+this become realized.
+
+Release-time Maintenance
+------------------------
+
+For maintenance of pg_upgrade itself, one will have to fork out a new
+storage manager from the previous stable release and "register" it within
+the system.  Alternatively, the new storage manager can be forked when the
+new release cycle begins.  Additionally, a pg_upgrade version has to be
+added implementing the API steps outlined in the pg_upgrade API section.
+
+
+Implementation Steps
+====================
+
+To materialize the above idea, I'd proceed as follows:
+
+*) Provide the initdb() API (quick)
+
+*) Resurrect the pluggable storage manager API to be usable for the
+   purpose.
+
+*) Document it
+
+*) Implement pg_upgrade API for 8.0 and 7.4.5.
+
+*) Extract 8.0 and 7.4.5 storage managers and have them implement the API
+   as a proof of concept.  Massage the API as needed.
+
+*) Document the process of adding new storage managers and pg_upgrade
+   drivers.
+
+*) Extract other versions storage managers.
+
+
+pg_upgrade sequence
+-------------------
+
+pg_upgrade API for the steps below to update for the next release.
+
+What to do with WAL?? Maybe upgrade can simply be done using WAL replay
+with old WAL manager? Not, fully, because not everything is in WAL, but
+some WAL recovery maybe needed in case the server was not shutdown cleanly
+before the upgrade.
+
+pg_upgrade will proceed as follows:
+
+- move PGDATA to PGDATA/<major pg version>
+- move tablespaces likewise
+- optional recovery from WAL in case old server was not shutdown properly
+-? Shall I upgrade PITR logs of 8.x??? So one can recover to a
+  point-in-time in the upgraded database?
+- CLUSTER all old data
+- ANALYZE all old data
+- initdb() new system catalogs
+- Merge in modifications from old system catalogs
+- upgrade schemas/users
+  -- variations
+- upgrade user relations
+
+Upgrade API:
+------------
+
+First draft, to be refined multiple times, but to convey the ideas behind:
+
+moveData()
+  movePGData()
+  moveTablespaces() 8.0+
+  moveDbLocation() < 8.0
+
+preliminaryRecovery()
+ - WAL??
+ - PITR 8.0+??
+
+preliminaryCleanup()
+  CLUSTER -- recover some dead space
+  ANALYZE -- gives us stats
+
+upgradeSystemInfo()
+  initdb()
+  mergeOldCatalogs()
+  mergeOldTemplates()
+
+upgradeUsers()
+
+upgradeSchemas()
+  - > 7.2, else NULL
+
+upgradeUserRelations()
+  upgradeIndices()
+    DROP/CREATE
+
+upgradeInit()
+{
+
+}
+
+The main body in pseudocode:
+
+upgradeLoop()
+{
+    moveData();
+    preliminaryRecovery();
+    preliminaryCleanup();
+    upgradeSystemInfo();
+    upgradeUsers();
+    upgradeSchemas();
+    upgradeUserRelations();
+}
+
+Something along these lines the API would be:
+
+typedef struct t_upgrade
+{
+       bool            (*moveData) (void);
+       bool            (*preliminaryRecovery) (void);          /* may be NULL */
+       bool            (*preliminaryCleanup) (void);           /* may be NULL */
+       bool            (*upgradeSystemInfo) (void);            /* may be NULL */
+       bool            (*upgradeUsers) (void);         /* may be NULL */
+       bool            (*upgradeSchemas) (void);               /* may be NULL */
+       bool            (*upgradeUserRelations) (void);         /* may be NULL */
+} t_upgrade;
+
+
+The above sequence is executed by either pg_upgrade utility uninterrupted
+or by the pg_autoupgrade daemon. In the former the upgrade priority is
+simply by OID, in the latter also, but can be overridden by the user using
+the UPGRADE command to schedule relations upgrade, write operation can
+also change such schedule, with user's selected choice to be first.  The
+more write requests a relation receives while in the upgrade queue, its
+priority increases; thus, the relation with most hits is on top. In case
+of tie, OID is the decision mark.
+
+Some issues to look into:
+
+- catalog merger
+- a crash in the middle of upgrade
+- PITR logs for 8.x+
+- ...
+
+Flames and Handwaiving
+----------------------
+
+Okay, flame is on, but before you flame, mind you, this is a very initial
+version of the design.  Some of the ideas may seem far fetched, the
+contents may seem messy, but I believe it's now more doable than ever and
+I am willing to put effort in it for the next release or two and then
+maintain it afterwards.  It's not going to be done in one shot maybe, but
+incrementally, using input, feedback, and hints from you, guys.
+
+Thank you for reading till this far :-) I.d like to hear from you if any
+of this made sense to you.
+
+Truly yours,
+
+-- 
+Serguei A. Mokhov            |  /~\    The ASCII
+Computer Science Department  |  \ / Ribbon Campaign
+Concordia University         |   X    Against HTML
+Montreal, Quebec, Canada     |  / \      Email!
+
+---------------------------(end of broadcast)---------------------------
+TIP 5: Have you checked our extensive FAQ?
+
+               http://www.postgresql.org/docs/faqs/FAQ.html
+
+From pgsql-hackers-owner+M59486@postgresql.org Thu Sep 30 16:39:54 2004
+Return-path: <pgsql-hackers-owner+M59486@postgresql.org>
+Received: from svr1.postgresql.org (svr1.postgresql.org [200.46.204.71])
+       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id i8UKdrw02740
+       for <pgman@candle.pha.pa.us>; Thu, 30 Sep 2004 16:39:53 -0400 (EDT)
+Received: from localhost (unknown [200.46.204.144])
+       by svr1.postgresql.org (Postfix) with ESMTP id EF25F329E3B
+       for <pgman@candle.pha.pa.us>; Thu, 30 Sep 2004 21:39:48 +0100 (BST)
+Received: from svr1.postgresql.org ([200.46.204.71])
+       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
+       with ESMTP id 38456-02 for <pgman@candle.pha.pa.us>;
+       Thu, 30 Sep 2004 20:39:46 +0000 (GMT)
+Received: from postgresql.org (svr1.postgresql.org [200.46.204.71])
+       by svr1.postgresql.org (Postfix) with ESMTP id 88673329C6B
+       for <pgman@candle.pha.pa.us>; Thu, 30 Sep 2004 21:39:48 +0100 (BST)
+X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
+Received: from localhost (unknown [200.46.204.144])
+       by svr1.postgresql.org (Postfix) with ESMTP id AA522329DAE
+       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>; Thu, 30 Sep 2004 21:37:43 +0100 (BST)
+Received: from svr1.postgresql.org ([200.46.204.71])
+       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
+       with ESMTP id 38130-02
+       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>;
+       Thu, 30 Sep 2004 20:37:39 +0000 (GMT)
+Received: from sss.pgh.pa.us (sss.pgh.pa.us [66.207.139.130])
+       by svr1.postgresql.org (Postfix) with ESMTP id 846E9329C63
+       for <pgsql-hackers@postgresql.org>; Thu, 30 Sep 2004 21:37:39 +0100 (BST)
+Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
+       by sss.pgh.pa.us (8.13.1/8.13.1) with ESMTP id i8UKa3jk025254;
+       Thu, 30 Sep 2004 16:36:03 -0400 (EDT)
+To: "Serguei A. Mokhov" <mokhov@cs.concordia.ca>
+cc: pgsql-hackers@postgresql.org
+Subject: Re: [HACKERS] pg_upgrade project: high-level design proposal of in-place upgrade facility 
+In-Reply-To: <Pine.LNX.4.58.0409301532390.4685@haida.cs.concordia.ca> 
+References: <Pine.LNX.4.58.0409301532390.4685@haida.cs.concordia.ca>
+Comments: In-reply-to "Serguei A. Mokhov" <mokhov@cs.concordia.ca>
+       message dated "Thu, 30 Sep 2004 15:49:00 -0400"
+Date: Thu, 30 Sep 2004 16:36:02 -0400
+Message-ID: <25253.1096576562@sss.pgh.pa.us>
+From: Tom Lane <tgl@sss.pgh.pa.us>
+X-Virus-Scanned: by amavisd-new at hub.org
+X-Mailing-List: pgsql-hackers
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by amavisd-new at hub.org
+X-Spam-Checker-Version: SpamAssassin 2.61 (1.212.2.1-2003-12-09-exp) on 
+       candle.pha.pa.us
+X-Spam-Status: No, hits=-4.9 required=5.0 tests=BAYES_00 autolearn=ham 
+       version=2.61
+Status: OR
+
+"Serguei A. Mokhov" <mokhov@cs.concordia.ca> writes:
+> Comments are very welcome, especially _*CONSTRUCTIVE*_...
+
+This is fundamentally wrong, because you are assigning the storage
+manager functionality that it does not have.  In particular, the
+storage manager knows nothing of the contents or format of the files
+it is managing, and so you can't realistically expect to use the smgr
+switch as a way to support access to tables with different internal
+formats.  The places that change in interesting ways across versions
+are usually far above the smgr switch.
+
+I don't believe in the idea of incremental "lazy" upgrades very much
+either.  It certainly will not work on the system catalogs --- you have
+to convert those in a big-bang fashion, because how are you going to
+find the other stuff otherwise?  And the real problem with it IMHO is
+that if something goes wrong partway through the process, you're in
+deep trouble because you have no way to back out.  You can't just revert
+to the old version because it won't understand your data, and your old
+backups that are compatible with it are now out of date.  If there are
+going to be any problems, you really need to find out about them
+immediately while your old backups are still current, not in a "lazy"
+fashion.
+
+The design we'd pretty much all bought into six months ago involved
+being able to do in-place upgrades when the format/contents of user
+relations and indexes is not changing.  All you'd have to do is dump
+and restore the schema data (system catalogs) which is a reasonably
+short process even on a large DB, so the big-bang nature of the
+conversion isn't a problem.  Admittedly this will not work for every
+single upgrade, but we had agreed that we could schedule upgrades
+so that the majority of releases do not change user data.  Historically
+that's been mostly true anyway, even without any deliberate attempt to
+group user-data-changing features together.
+
+I think the last major discussion about it started here:
+http://archives.postgresql.org/pgsql-hackers/2003-12/msg00379.php
+(I got distracted by other stuff and never did the promised work,
+but I still think the approach is sound.)
+
+                       regards, tom lane
+
+---------------------------(end of broadcast)---------------------------
+TIP 2: you can get off all lists at once with the unregister command
+    (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
+
+From pgsql-hackers-owner+M59497@postgresql.org Thu Sep 30 17:44:44 2004
+Return-path: <pgsql-hackers-owner+M59497@postgresql.org>
+Received: from svr1.postgresql.org (svr1.postgresql.org [200.46.204.71])
+       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id i8ULihw11377
+       for <pgman@candle.pha.pa.us>; Thu, 30 Sep 2004 17:44:43 -0400 (EDT)
+Received: from localhost (unknown [200.46.204.144])
+       by svr1.postgresql.org (Postfix) with ESMTP id D0A6B329E2E
+       for <pgman@candle.pha.pa.us>; Thu, 30 Sep 2004 22:44:38 +0100 (BST)
+Received: from svr1.postgresql.org ([200.46.204.71])
+       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
+       with ESMTP id 55636-04 for <pgman@candle.pha.pa.us>;
+       Thu, 30 Sep 2004 21:44:36 +0000 (GMT)
+Received: from postgresql.org (svr1.postgresql.org [200.46.204.71])
+       by svr1.postgresql.org (Postfix) with ESMTP id 6ED67329DFC
+       for <pgman@candle.pha.pa.us>; Thu, 30 Sep 2004 22:44:38 +0100 (BST)
+X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
+Received: from localhost (unknown [200.46.204.144])
+       by svr1.postgresql.org (Postfix) with ESMTP id 040D2329E2E
+       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>; Thu, 30 Sep 2004 22:42:24 +0100 (BST)
+Received: from svr1.postgresql.org ([200.46.204.71])
+       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
+       with ESMTP id 55767-04
+       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>;
+       Thu, 30 Sep 2004 21:42:18 +0000 (GMT)
+Received: from authenticity.encs.concordia.ca (authenticity-96.encs.concordia.ca [132.205.96.93])
+       by svr1.postgresql.org (Postfix) with ESMTP id E3A4D329DFC
+       for <pgsql-hackers@postgresql.org>; Thu, 30 Sep 2004 22:42:19 +0100 (BST)
+Received: from haida.cs.concordia.ca (IDENT:mokhov@haida.cs.concordia.ca [132.205.64.45])
+       by authenticity.encs.concordia.ca (8.12.11/8.12.11) with ESMTP id i8ULgJrP001049;
+       Thu, 30 Sep 2004 17:42:19 -0400
+Date: Thu, 30 Sep 2004 17:42:19 -0400 (EDT)
+From: "Serguei A. Mokhov" <mokhov@cs.concordia.ca>
+To: Tom Lane <tgl@sss.pgh.pa.us>
+cc: pgsql-hackers@postgresql.org
+Subject: Re: [HACKERS] pg_upgrade project: high-level design proposal of
+In-Reply-To: <25253.1096576562@sss.pgh.pa.us>
+Message-ID: <Pine.LNX.4.58.0409301725550.4685@haida.cs.concordia.ca>
+References: <Pine.LNX.4.58.0409301532390.4685@haida.cs.concordia.ca>
+       <25253.1096576562@sss.pgh.pa.us>
+MIME-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+X-Virus-Scanned: by amavisd-new at hub.org
+X-Mailing-List: pgsql-hackers
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by amavisd-new at hub.org
+X-Spam-Checker-Version: SpamAssassin 2.61 (1.212.2.1-2003-12-09-exp) on 
+       candle.pha.pa.us
+X-Spam-Status: No, hits=-4.9 required=5.0 tests=BAYES_00 autolearn=ham 
+       version=2.61
+Status: OR
+
+On Thu, 30 Sep 2004, Tom Lane wrote:
+
+> Date: Thu, 30 Sep 2004 16:36:02 -0400
+>
+> "Serguei A. Mokhov" <mokhov@cs.concordia.ca> writes:
+> > Comments are very welcome, especially _*CONSTRUCTIVE*_...
+>
+> This is fundamentally wrong, because you are assigning the storage
+> manager functionality that it does not have.  In particular, the
+
+Maybe, that's why I was asking of all init-db forcing paths, so I can go
+level above smgr to upgrade stuff, let say in access/ and other parts. I
+did ask that before and never got a reply. So the concept of "Storage
+Managers" may and will go well beyond the smgt API. That's the design
+refinement stage.
+
+> I don't believe in the idea of incremental "lazy" upgrades very much
+> either.  It certainly will not work on the system catalogs --- you have
+> to convert those in a big-bang fashion,
+
+I never proposed to do that to system catalogs, on the contrary, I said
+the system catalogs are to be upgraded upon the postmaster startup. only
+user relations are upgraded lazily:
+
+> The relations to be upgraded are ordered according to some priority,
+> e.g.  system relations being first, then user-owned relations.  System
+> relations upgrade is forced upon the postmaster startup, and then user
+> relations are processed lazily.
+
+So looks like we don't disagree here :)
+
+> The design we'd pretty much all bought into six months ago involved
+> being able to do in-place upgrades when the format/contents of user
+> relations and indexes is not changing.  All you'd have to do is dump and
+> restore the schema data (system catalogs) which is a reasonably short
+> process even on a large DB, so the big-bang nature of the conversion
+> isn't a problem.  Admittedly this will not work for every single
+> upgrade, but we had agreed that we could schedule upgrades so that the
+> majority of releases do not change user data.  Historically that's been
+> mostly true anyway, even without any deliberate attempt to group
+> user-data-changing features together.
+
+Annoyingly enough, they still do change.
+
+> I think the last major discussion about it started here:
+> http://archives.postgresql.org/pgsql-hackers/2003-12/msg00379.php
+> (I got distracted by other stuff and never did the promised work,
+> but I still think the approach is sound.)
+
+I'll go over that discussion and maybe will combine useful ideas together.
+I'll open a pgfoundry project to develop it there and then will submit for
+evaluation UNLESS you reserved it for yourself, Tom, to fullfill the
+promise... If anybody objects the pgfoundry idea to test the concepts,
+I'll apply for a project there.
+
+Thank you for the comments!
+
+>                      regards, tom lane
+>
+
+-- 
+Serguei A. Mokhov            |  /~\    The ASCII
+Computer Science Department  |  \ / Ribbon Campaign
+Concordia University         |   X    Against HTML
+Montreal, Quebec, Canada     |  / \      Email!
+
+---------------------------(end of broadcast)---------------------------
+TIP 7: don't forget to increase your free space map settings
+