Re: [HACKERS] Catalog version numbering added (committers READ THIS) - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: [HACKERS] Catalog version numbering added (committers READ THIS)
Date
Msg-id 199910260449.AAA20043@candle.pha.pa.us
Whole thread Raw
In response to Catalog version numbering added (committers READ THIS)  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Good idea.


> I have added a new feature that I suggested a few weeks ago (and didn't
> get a lot of feedback about --- if you didn't like the idea, you shoulda
> complained then ;-)).  To wit, there is now an internal version number
> that can be bumped anytime anyone makes an initdb-forcing change.
> 
> If we are faithful about changing this number when necessary, then
> developers will not get burnt by failing to notice "you need to initdb"
> messages in the pghackers list.  I know some people have wasted hours
> that way in the past.
> 
> The new number lives in src/include/catalog/catversion.h, and I think
> I will just copy the comments in that file:
> 
>  * catversion.h
>  *      "Catalog version number" for Postgres.
>  *
>  * The catalog version number is used to flag incompatible changes in
>  * the Postgres system catalogs.  Whenever anyone changes the format of
>  * a system catalog relation, or adds, deletes, or modifies standard
>  * catalog entries in such a way that an updated backend wouldn't work
>  * with an old database (or vice versa), the catalog version number
>  * should be changed.  The version number stored in pg_control by initdb
>  * is checked against the version number compiled into the backend at
>  * startup time, so that a backend can refuse to run in an incompatible
>  * database.
>  *
>  * The point of this feature is to provide a finer grain of compatibility
>  * checking than is possible from looking at the major version number
>  * stored in PG_VERSION.  It shouldn't matter to end users, but during
>  * development cycles we usually make quite a few incompatible changes
>  * to the contents of the system catalogs, and we don't want to bump the
>  * major version number for each one.  What we can do instead is bump
>  * this internal version number.  This should save some grief for
>  * developers who might otherwise waste time tracking down "bugs" that
>  * are really just code-vs-database incompatibilities.
>  *
>  * The rule for developers is: if you commit a change that requires
>  * an initdb, you should update the catalog version number (as well as
>  * notifying the pghackers mailing list, which has been the informal
>  * practice for a long time).
>  *
>  * The catalog version number is placed here since modifying files in
>  * include/catalog is the most common kind of initdb-forcing change.
>  * But it could be used to protect any kind of incompatible change in
>  * database contents or layout, such as altering tuple headers.
> 
> Naturally, you need to initdb after retrieving this update, but the
> system will now tell you so if you forget!  For example:
> 
> FATAL 2:  database was initialized with CATALOG_VERSION_NO 0,
>         but the backend was compiled with CATALOG_VERSION_NO 199910241.
>         looks like you need to initdb.
> 
>             regards, tom lane
> 
> ************
> 


--  Bruce Momjian                        |  http://www.op.net/~candle maillist@candle.pha.pa.us            |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026
 


pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] Re: [PATCHES] COMMENT ON patch
Next
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] Re: [PATCHES] COMMENT ON patch