Use new utils/version.c instead of backend/utils/init/magic.c.
This commit is contained in:
parent
bbe89089c8
commit
17befd6c69
@ -34,7 +34,7 @@
|
||||
#
|
||||
#
|
||||
# IDENTIFICATION
|
||||
# $Header: /cvsroot/pgsql/src/backend/Makefile,v 1.14 1996/11/03 09:05:30 bryanh Exp $
|
||||
# $Header: /cvsroot/pgsql/src/backend/Makefile,v 1.15 1996/11/12 06:46:04 bryanh Exp $
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
@ -131,7 +131,8 @@ OBJS = access/SUBSYS.o bootstrap/SUBSYS.o catalog/SUBSYS.o \
|
||||
lib/SUBSYS.o libpq/SUBSYS.o main/SUBSYS.o nodes/SUBSYS.o \
|
||||
optimizer/SUBSYS.o parser/SUBSYS.o port/SUBSYS.o \
|
||||
postmaster/SUBSYS.o regex/SUBSYS.o rewrite/SUBSYS.o \
|
||||
storage/SUBSYS.o tcop/SUBSYS.o utils/SUBSYS.o
|
||||
storage/SUBSYS.o tcop/SUBSYS.o utils/SUBSYS.o \
|
||||
../utils/version.o
|
||||
|
||||
ifdef TIOGA
|
||||
OBJS += tioga/SUBSYS.o
|
||||
@ -167,6 +168,7 @@ postgres_group4:
|
||||
ifdef TIOGA
|
||||
$(MAKE) -C tioga all
|
||||
endif
|
||||
$(MAKE) -C ../utils version.o
|
||||
|
||||
global1.bki.source local1_template1.bki.source:
|
||||
$(MAKE) -C catalog $@
|
||||
|
@ -10,7 +10,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.23 1996/11/10 03:01:41 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.24 1996/11/12 06:46:36 bryanh Exp $
|
||||
*
|
||||
* NOTES
|
||||
*
|
||||
@ -75,6 +75,7 @@
|
||||
#include "libpq/auth.h"
|
||||
#include "libpq/pqcomm.h"
|
||||
#include "miscadmin.h"
|
||||
#include "version.h"
|
||||
#include "lib/dllist.h"
|
||||
#include "nodes/nodes.h"
|
||||
#include "utils/mcxt.h"
|
||||
@ -1186,7 +1187,7 @@ checkDataDir(void)
|
||||
SEP_CHAR);
|
||||
if ((fp=fopen(path, "r")) == NULL) {
|
||||
fprintf(stderr, "%s does not find the database. Expected to find it "
|
||||
"in the PGDATA directory \"%s\", but unable to open directory "
|
||||
"in the PGDATA directory \"%s\", but unable to open file "
|
||||
"with pathname \"%s\".\n",
|
||||
progname, DataDir, path);
|
||||
exit(2);
|
||||
@ -1194,11 +1195,20 @@ checkDataDir(void)
|
||||
fclose(fp);
|
||||
|
||||
#ifndef WIN32
|
||||
if (!ValidPgVersion(DataDir)) {
|
||||
fprintf(stderr, "%s: data base in \"%s\" is of a different version.\n",
|
||||
progname, DataDir);
|
||||
{
|
||||
char *reason; /* reason ValidatePgVersion failed. NULL if didn't */
|
||||
ValidatePgVersion(DataDir, &reason);
|
||||
if (reason) {
|
||||
fprintf(stderr,
|
||||
"Database system in directory %s "
|
||||
"is not compatible with this version of "
|
||||
"Postgres, or we are unable to read the PG_VERSION file. "
|
||||
"Explanation from ValidatePgVersion: %s\n",
|
||||
DataDir, reason);
|
||||
free(reason);
|
||||
exit(2);
|
||||
}
|
||||
}
|
||||
#endif /* WIN32 */
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
# Makefile for utils/init
|
||||
#
|
||||
# IDENTIFICATION
|
||||
# $Header: /cvsroot/pgsql/src/backend/utils/init/Makefile,v 1.2 1996/11/09 06:23:41 momjian Exp $
|
||||
# $Header: /cvsroot/pgsql/src/backend/utils/init/Makefile,v 1.3 1996/11/12 06:46:40 bryanh Exp $
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
@ -20,7 +20,7 @@ CFLAGS += $(INCLUDE_OPT)
|
||||
CFLAGS += -DPOSTGRESDIR='"$(POSTGRESDIR)"' -DPGDATADIR='"$(DATADIR)"' \
|
||||
-DPOSTPORT='"$(POSTPORT)"'
|
||||
|
||||
OBJS = enbl.o findbe.o globals.o magic.o miscinit.o postinit.o
|
||||
OBJS = enbl.o findbe.o globals.o miscinit.o postinit.o
|
||||
|
||||
all: SUBSYS.o
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.5 1996/11/08 06:00:33 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.6 1996/11/12 06:46:42 bryanh Exp $
|
||||
*
|
||||
* NOTES
|
||||
* InitPostgres() is the function called from PostgresMain
|
||||
@ -30,12 +30,14 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <math.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "postgres.h"
|
||||
#include "version.h"
|
||||
|
||||
#include <storage/backendid.h>
|
||||
#include <storage/buf_internals.h>
|
||||
@ -228,9 +230,15 @@ InitMyDatabaseId()
|
||||
DatabaseRelationName);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* DoChdirAndInitDatabaseNameAndPath --
|
||||
* Sets current directory appropriately for given path and name.
|
||||
* Set current directory to the database directory for the database
|
||||
* named <name>.
|
||||
* Also set global variables DatabasePath and DatabaseName to those
|
||||
* values. Also check for proper version of database system and
|
||||
* database. Exit program via elog() if anything doesn't check out.
|
||||
*
|
||||
* Arguments:
|
||||
* Path and name are invalid if it invalid as a string.
|
||||
@ -239,62 +247,93 @@ InitMyDatabaseId()
|
||||
* Name is "badly formated" if it contains more than 16 characters or if
|
||||
* it is a bad file name (e.g., it contains a '/' or an 8-bit character).
|
||||
*
|
||||
* Side effects:
|
||||
* Initially, DatabasePath and DatabaseName are invalid. They are
|
||||
* set to valid strings before this function returns.
|
||||
*
|
||||
* Exceptions:
|
||||
* BadState if called more than once.
|
||||
* BadArg if both path and name are "badly formated" or invalid.
|
||||
* BadArg if path and name are both "inconsistent" and valid.
|
||||
*/
|
||||
/* ----------------
|
||||
* DoChdirAndInitDatabaseNameAndPath
|
||||
*
|
||||
* this just chdir's to the proper data/base directory
|
||||
* XXX clean this up more.
|
||||
*
|
||||
* XXX The following code is an incorrect of the semantics
|
||||
* XXX described in the header file. Handling of defaults
|
||||
* XXX should happen here, too.
|
||||
* ----------------
|
||||
* This routine is inappropriate in bootstrap mode, since the directories
|
||||
* and version files need not exist yet if we're in bootstrap mode.
|
||||
*/
|
||||
void
|
||||
DoChdirAndInitDatabaseNameAndPath(char *name, /* name of database */
|
||||
char *path) /* full path to database */
|
||||
{
|
||||
/* ----------------
|
||||
* check the path
|
||||
* ----------------
|
||||
*/
|
||||
if (path)
|
||||
SetDatabasePath(path);
|
||||
else
|
||||
elog(FATAL, "DoChdirAndInitDatabaseNameAndPath: path:%s is not valid",
|
||||
path);
|
||||
static void
|
||||
DoChdirAndInitDatabaseNameAndPath(char *name) {
|
||||
char *reason;
|
||||
/* Failure reason returned by some function. NULL if no failure */
|
||||
#ifndef WIN32
|
||||
struct stat statbuf;
|
||||
#else
|
||||
struct _stat statbuf;
|
||||
#endif
|
||||
char errormsg[1000];
|
||||
|
||||
/* ----------------
|
||||
* check the name
|
||||
* ----------------
|
||||
*/
|
||||
if (name)
|
||||
if (stat(DataDir, &statbuf) < 0)
|
||||
sprintf(errormsg, "Database system does not exist. "
|
||||
"PGDATA directory '%s' not found. Normally, you "
|
||||
"create a database system by running initdb.",
|
||||
DataDir);
|
||||
else {
|
||||
char myPath[MAXPGPATH]; /* DatabasePath points here! */
|
||||
|
||||
if (strlen(DataDir) + strlen(name) + 10 > sizeof(myPath))
|
||||
sprintf(errormsg, "Internal error in postinit.c: database "
|
||||
"pathname exceeds maximum allowable length.");
|
||||
else {
|
||||
sprintf(myPath, "%s/base/%s", DataDir, name);
|
||||
|
||||
if (stat(myPath, &statbuf) < 0)
|
||||
sprintf(errormsg,
|
||||
"Database '%s' does not exist. "
|
||||
"(We know this because the directory '%s' "
|
||||
"does not exist). You can create a database "
|
||||
"with the SQL command CREATE DATABASE. To see "
|
||||
"what databases exist, look at the subdirectories "
|
||||
"of '%s/base/'.",
|
||||
name, myPath, DataDir);
|
||||
else {
|
||||
ValidatePgVersion(DataDir, &reason);
|
||||
if (reason != NULL)
|
||||
sprintf(errormsg,
|
||||
"InitPostgres could not validate that the database "
|
||||
"system version is compatible with this level of "
|
||||
"Postgres. You may need to run initdb to create "
|
||||
"a new database system. %s",
|
||||
reason);
|
||||
else {
|
||||
ValidatePgVersion(myPath, &reason);
|
||||
if (reason != NULL)
|
||||
sprintf(errormsg,
|
||||
"InitPostgres could not validate that the "
|
||||
"database version is compatible with this level "
|
||||
"of Postgres, even though the database system "
|
||||
"as a whole appears to be at a compatible level. "
|
||||
"You may need to recreate the database with SQL "
|
||||
"commands DROP DATABASE and CREATE DATABASE. "
|
||||
"%s",
|
||||
reason);
|
||||
else {
|
||||
/* The directories and PG_VERSION files are in order.*/
|
||||
int rc; /* return code from some function we call */
|
||||
|
||||
SetDatabasePath(myPath);
|
||||
SetDatabaseName(name);
|
||||
else
|
||||
elog(FATAL, "DoChdirAndInitDatabaseNameAndPath: name:%s is not valid",
|
||||
name);
|
||||
|
||||
/* ----------------
|
||||
* change to the directory, or die trying.
|
||||
*
|
||||
* XXX unless the path hasn't been set because we're bootstrapping.
|
||||
* HP-UX doesn't like chdir("") so check for that case before
|
||||
* doing anything drastic.
|
||||
* ----------------
|
||||
*/
|
||||
if (*path && (chdir(path) < 0))
|
||||
elog(FATAL, "DoChdirAndInitDatabaseNameAndPath: chdir(\"%s\"): %m",
|
||||
path);
|
||||
rc = chdir(myPath);
|
||||
if (rc < 0)
|
||||
sprintf(errormsg,
|
||||
"InitPostgres unable to change "
|
||||
"current directory to '%s', errno = %s (%d).",
|
||||
myPath, strerror(errno), errno);
|
||||
else errormsg[0] = '\0';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (errormsg[0] != '\0')
|
||||
elog(FATAL, errormsg);
|
||||
/* Above does not return */
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* --------------------------------
|
||||
* InitUserid
|
||||
@ -518,39 +557,11 @@ InitPostgres(char *name) /* database name */
|
||||
if (!TransactionFlushEnabled())
|
||||
on_exitpg(FlushBufferPool, (caddr_t) NULL);
|
||||
|
||||
/* ----------------
|
||||
* check for valid "meta gunk" (??? -cim 10/5/90) and change to
|
||||
* database directory.
|
||||
*
|
||||
* Note: DatabaseName, MyDatabaseName, and DatabasePath are all
|
||||
* initialized with DatabaseMetaGunkIsConsistent(), strncpy() and
|
||||
* DoChdirAndInitDatabase() below! XXX clean this crap up!
|
||||
* -cim 10/5/90
|
||||
* ----------------
|
||||
*/
|
||||
{
|
||||
char myPath[MAXPGPATH] = "."; /* DatabasePath points here! */
|
||||
|
||||
/* ----------------
|
||||
* DatabaseMetaGunkIsConsistent fills in myPath, but what about
|
||||
* when bootstrap or Noversion is true?? -cim 10/5/90
|
||||
* ----------------
|
||||
*/
|
||||
|
||||
if (! bootstrap &&
|
||||
! DatabaseMetaGunkIsConsistent(name, myPath) &&
|
||||
! Noversion) {
|
||||
elog(NOTICE, "InitPostgres: could not locate valid PG_VERSION\n");
|
||||
elog(NOTICE, "files for %s and %s.", DataDir, name);
|
||||
elog(FATAL, "Have you run initdb/createdb and set PGDATA properly?");
|
||||
}
|
||||
|
||||
/* ----------------
|
||||
* ok, we've figured out myName and myPath, now save these
|
||||
* and chdir to myPath.
|
||||
* ----------------
|
||||
*/
|
||||
DoChdirAndInitDatabaseNameAndPath(name, myPath);
|
||||
if (bootstrap) {
|
||||
SetDatabasePath(".");
|
||||
SetDatabaseName(name);
|
||||
} else {
|
||||
DoChdirAndInitDatabaseNameAndPath(name);
|
||||
}
|
||||
|
||||
/* ********************************
|
||||
|
@ -7,20 +7,34 @@
|
||||
#
|
||||
#
|
||||
# IDENTIFICATION
|
||||
# $Header: /cvsroot/pgsql/src/bin/pg_version/Attic/Makefile,v 1.1.1.1 1996/07/09 06:22:14 scrappy Exp $
|
||||
# $Header: /cvsroot/pgsql/src/bin/pg_version/Attic/Makefile,v 1.2 1996/11/12 06:46:54 bryanh Exp $
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
PROG= pg_version
|
||||
|
||||
MKDIR= ../../mk
|
||||
include $(MKDIR)/postgres.mk
|
||||
SRCDIR= ../..
|
||||
include ../Makefile.global
|
||||
include ../../Makefile.global
|
||||
|
||||
VPATH:=$(VPATH):$(srcdir)/backend/utils/init
|
||||
SRCS= pg_version.c magic.c
|
||||
OBJS= pg_version.o ../../utils/version.o
|
||||
|
||||
CFLAGS+= -I$(srcdir)/backend/port/$(PORTNAME)
|
||||
all: pg_version
|
||||
|
||||
include $(MKDIR)/postgres.prog.mk
|
||||
pg_version: submake $(OBJS)
|
||||
$(CC) $(LDFLAGS) -o pg_version $(OBJS) $(LD_ADD)
|
||||
|
||||
.PHONY: submake
|
||||
submake:
|
||||
$(MAKE) -C ../../utils version.o
|
||||
|
||||
install: pg_version
|
||||
$(INSTALL) $(INSTL_EXE_OPTS) pg_version $(DESTDIR)$(BINDIR)/pg_version
|
||||
|
||||
depend dep:
|
||||
$(CC) -MM $(INCLUDE_OPT) *.c >depend
|
||||
|
||||
clean:
|
||||
rm -f pg_version pg_version.o
|
||||
|
||||
ifeq (depend,$(wildcard depend))
|
||||
include depend
|
||||
endif
|
||||
|
@ -7,38 +7,34 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/bin/pg_version/Attic/pg_version.c,v 1.5 1996/11/10 03:04:02 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/bin/pg_version/Attic/pg_version.c,v 1.6 1996/11/12 06:47:00 bryanh Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int Noversion = 0;
|
||||
char *DataDir = (char *) NULL;
|
||||
#include <version.h> /* interface to SetPgVersion */
|
||||
|
||||
|
||||
extern void SetPgVersion(const char *);
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int retcode; /* our eventual return code */
|
||||
char *reason; /* Reason that SetPgVersion failed, NULL if it didn't. */
|
||||
|
||||
if (argc < 2) {
|
||||
fprintf(stderr, "pg_version: missing argument\n");
|
||||
exit(1);
|
||||
}
|
||||
SetPgVersion(argv[1]);
|
||||
return(0);
|
||||
}
|
||||
|
||||
void elog(void); /* make compiler happy */
|
||||
|
||||
void
|
||||
elog(void) {}
|
||||
|
||||
int GetDataHome(void); /* make compiler happy */
|
||||
|
||||
int
|
||||
GetDataHome(void)
|
||||
{
|
||||
return(0);
|
||||
SetPgVersion(argv[1], &reason);
|
||||
if (reason) {
|
||||
fprintf(stderr,
|
||||
"pg_version is unable to create the PG_VERSION file. "
|
||||
"SetPgVersion gave this reason: %s\n",
|
||||
reason);
|
||||
retcode = 10;
|
||||
} else retcode = 0;
|
||||
return(retcode);
|
||||
}
|
||||
|
@ -12,7 +12,7 @@
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: miscadmin.h,v 1.2 1996/11/06 10:28:59 scrappy Exp $
|
||||
* $Id: miscadmin.h,v 1.3 1996/11/12 06:47:10 bryanh Exp $
|
||||
*
|
||||
* NOTES
|
||||
* some of the information in this file will be moved to
|
||||
@ -69,14 +69,6 @@ extern Oid LastOidProcessed; /* for query rewrite */
|
||||
*/
|
||||
#define NDBUFS 64
|
||||
|
||||
/*****************************************************************************
|
||||
* magic.h - definitions of the indexes of the magic numbers *
|
||||
*****************************************************************************/
|
||||
|
||||
#define PG_RELEASE 6
|
||||
#define PG_VERSION 0
|
||||
#define PG_VERFILE "PG_VERSION"
|
||||
|
||||
/*****************************************************************************
|
||||
* pdir.h -- *
|
||||
* POSTGRES directory path definitions. *
|
||||
@ -148,7 +140,6 @@ typedef int16 ExitStatus;
|
||||
|
||||
/* in utils/init/postinit.c */
|
||||
extern void InitMyDatabaseId(void);
|
||||
extern void DoChdirAndInitDatabaseNameAndPath(char *name, char *path);
|
||||
extern void InitUserid(void);
|
||||
extern void InitCommunication(void);
|
||||
extern void InitStdio(void);
|
||||
@ -170,12 +161,4 @@ extern bool IsNormalProcessingMode(void);
|
||||
extern void SetProcessingMode(ProcessingMode mode);
|
||||
extern ProcessingMode GetProcessingMode(void);
|
||||
|
||||
|
||||
/*
|
||||
* Prototypes for utils/init/magic.c
|
||||
*/
|
||||
extern int DatabaseMetaGunkIsConsistent(const char *database, char *path);
|
||||
extern int ValidPgVersion(const char *path);
|
||||
extern void SetPgVersion(const char *path);
|
||||
|
||||
#endif /* MISCADMIN_H */
|
||||
|
Loading…
x
Reference in New Issue
Block a user