Re: [HACKERS] Catalog version numbering added (committers READ THIS)

From: Bruce Momjian <maillist(at)candle(dot)pha(dot)pa(dot)us>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-hackers(at)postgreSQL(dot)org
Subject: Re: [HACKERS] Catalog version numbering added (committers READ THIS)
Date: 1999-10-26 04:49:48
Message-ID: 199910260449.AAA20043@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)candle(dot)pha(dot)pa(dot)us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Bruce Momjian 1999-10-26 04:52:23 Re: [HACKERS] Re: [PATCHES] COMMENT ON patch
Previous Message Bruce Momjian 1999-10-26 04:34:45 Re: [HACKERS] Re: [PATCHES] COMMENT ON patch