Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
17befd6c
Commit
17befd6c
authored
Nov 12, 1996
by
Bryan Henderson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use new utils/version.c instead of backend/utils/init/magic.c.
parent
bbe89089
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
370 additions
and
354 deletions
+370
-354
src/backend/Makefile
src/backend/Makefile
+5
-3
src/backend/postmaster/postmaster.c
src/backend/postmaster/postmaster.c
+17
-7
src/backend/utils/init/Makefile
src/backend/utils/init/Makefile
+2
-2
src/backend/utils/init/postinit.c
src/backend/utils/init/postinit.c
+307
-296
src/bin/pg_version/Makefile
src/bin/pg_version/Makefile
+23
-9
src/bin/pg_version/pg_version.c
src/bin/pg_version/pg_version.c
+15
-19
src/include/miscadmin.h
src/include/miscadmin.h
+1
-18
No files found.
src/backend/Makefile
View file @
17befd6c
...
@@ -34,7 +34,7 @@
...
@@ -34,7 +34,7 @@
#
#
#
#
# IDENTIFICATION
# IDENTIFICATION
# $Header: /cvsroot/pgsql/src/backend/Makefile,v 1.1
4 1996/11/03 09:05:30
bryanh Exp $
# $Header: /cvsroot/pgsql/src/backend/Makefile,v 1.1
5 1996/11/12 06:46:04
bryanh Exp $
#
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
...
@@ -131,7 +131,8 @@ OBJS = access/SUBSYS.o bootstrap/SUBSYS.o catalog/SUBSYS.o \
...
@@ -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
\
lib/SUBSYS.o libpq/SUBSYS.o main/SUBSYS.o nodes/SUBSYS.o
\
optimizer/SUBSYS.o parser/SUBSYS.o port/SUBSYS.o
\
optimizer/SUBSYS.o parser/SUBSYS.o port/SUBSYS.o
\
postmaster/SUBSYS.o regex/SUBSYS.o rewrite/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
ifdef
TIOGA
OBJS
+=
tioga/SUBSYS.o
OBJS
+=
tioga/SUBSYS.o
...
@@ -139,7 +140,7 @@ endif
...
@@ -139,7 +140,7 @@ endif
all
:
postgres global1.bki.source local1_template1.bki.source
all
:
postgres global1.bki.source local1_template1.bki.source
postgres
:
postgres_group1 postgres_group2 postgres_group3 postgres_group4
postgres
:
postgres_group1 postgres_group2 postgres_group3 postgres_group4
$(CC)
$(LDFLAGS)
-o
postgres
$(OBJS)
$(LDADD)
$(CC)
$(LDFLAGS)
-o
postgres
$(OBJS)
$(LDADD)
postgres_group1
:
postgres_group1
:
...
@@ -167,6 +168,7 @@ postgres_group4:
...
@@ -167,6 +168,7 @@ postgres_group4:
ifdef
TIOGA
ifdef
TIOGA
$(MAKE)
-C
tioga all
$(MAKE)
-C
tioga all
endif
endif
$(MAKE)
-C
../utils version.o
global1.bki.source local1_template1.bki.source
:
global1.bki.source local1_template1.bki.source
:
$(MAKE)
-C
catalog
$@
$(MAKE)
-C
catalog
$@
...
...
src/backend/postmaster/postmaster.c
View file @
17befd6c
...
@@ -10,7 +10,7 @@
...
@@ -10,7 +10,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.2
3 1996/11/10 03:01:41 momjian
Exp $
* $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.2
4 1996/11/12 06:46:36 bryanh
Exp $
*
*
* NOTES
* NOTES
*
*
...
@@ -75,6 +75,7 @@
...
@@ -75,6 +75,7 @@
#include "libpq/auth.h"
#include "libpq/auth.h"
#include "libpq/pqcomm.h"
#include "libpq/pqcomm.h"
#include "miscadmin.h"
#include "miscadmin.h"
#include "version.h"
#include "lib/dllist.h"
#include "lib/dllist.h"
#include "nodes/nodes.h"
#include "nodes/nodes.h"
#include "utils/mcxt.h"
#include "utils/mcxt.h"
...
@@ -1186,18 +1187,27 @@ checkDataDir(void)
...
@@ -1186,18 +1187,27 @@ checkDataDir(void)
SEP_CHAR
);
SEP_CHAR
);
if
((
fp
=
fopen
(
path
,
"r"
))
==
NULL
)
{
if
((
fp
=
fopen
(
path
,
"r"
))
==
NULL
)
{
fprintf
(
stderr
,
"%s does not find the database. Expected to find it "
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
"
,
"with pathname
\"
%s
\"
.
\n
"
,
progname
,
DataDir
,
path
);
progname
,
DataDir
,
path
);
exit
(
2
);
exit
(
2
);
}
}
fclose
(
fp
);
fclose
(
fp
);
#ifndef WIN32
#ifndef WIN32
if
(
!
ValidPgVersion
(
DataDir
))
{
{
fprintf
(
stderr
,
"%s: data base in
\"
%s
\"
is of a different version.
\n
"
,
char
*
reason
;
/* reason ValidatePgVersion failed. NULL if didn't */
progname
,
DataDir
);
ValidatePgVersion
(
DataDir
,
&
reason
);
exit
(
2
);
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 */
#endif
/* WIN32 */
}
}
...
...
src/backend/utils/init/Makefile
View file @
17befd6c
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
# Makefile for utils/init
# Makefile for utils/init
#
#
# IDENTIFICATION
# 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)
...
@@ -20,7 +20,7 @@ CFLAGS += $(INCLUDE_OPT)
CFLAGS
+=
-DPOSTGRESDIR
=
'"
$(POSTGRESDIR)
"'
-DPGDATADIR
=
'"
$(DATADIR)
"'
\
CFLAGS
+=
-DPOSTGRESDIR
=
'"
$(POSTGRESDIR)
"'
-DPGDATADIR
=
'"
$(DATADIR)
"'
\
-DPOSTPORT
=
'"
$(POSTPORT)
"'
-DPOSTPORT
=
'"
$(POSTPORT)
"'
OBJS
=
enbl.o findbe.o globals.o m
agic.o m
iscinit.o postinit.o
OBJS
=
enbl.o findbe.o globals.o miscinit.o postinit.o
all
:
SUBSYS.o
all
:
SUBSYS.o
...
...
src/backend/utils/init/postinit.c
View file @
17befd6c
...
@@ -7,22 +7,22 @@
...
@@ -7,22 +7,22 @@
*
*
*
*
* IDENTIFICATION
* 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
* NOTES
*
InitPostgres() is the function called from PostgresMain
*
InitPostgres() is the function called from PostgresMain
*
which does all non-trival initialization, mainly by calling
*
which does all non-trival initialization, mainly by calling
*
all the other initialization functions. InitPostgres()
*
all the other initialization functions. InitPostgres()
*
is only used within the "postgres" backend and so that routine
*
is only used within the "postgres" backend and so that routine
*
is in tcop/postgres.c InitPostgres() is needed in cinterface.a
*
is in tcop/postgres.c InitPostgres() is needed in cinterface.a
*
because things like the bootstrap backend program need it. Hence
*
because things like the bootstrap backend program need it. Hence
*
you find that in this file...
*
you find that in this file...
*
*
*
If you feel the need to add more initialization code, it should be
*
If you feel the need to add more initialization code, it should be
*
done in InitPostgres() or someplace lower. Do not start
*
done in InitPostgres() or someplace lower. Do not start
*
putting stuff in PostgresMain - if you do then someone
*
putting stuff in PostgresMain - if you do then someone
*
will have to clean it up later, and it's not going to be me!
*
will have to clean it up later, and it's not going to be me!
*
-cim 10/3/90
*
-cim 10/3/90
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -30,12 +30,14 @@
...
@@ -30,12 +30,14 @@
#include <stdio.h>
#include <stdio.h>
#include <string.h>
#include <string.h>
#include <sys/file.h>
#include <sys/file.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/ipc.h>
#include <math.h>
#include <math.h>
#include <unistd.h>
#include <unistd.h>
#include "postgres.h"
#include "postgres.h"
#include "version.h"
#include <storage/backendid.h>
#include <storage/backendid.h>
#include <storage/buf_internals.h>
#include <storage/buf_internals.h>
...
@@ -46,22 +48,22 @@
...
@@ -46,22 +48,22 @@
#include "access/heapam.h"
#include "access/heapam.h"
#include "access/xact.h"
#include "access/xact.h"
#include "storage/bufmgr.h"
#include "storage/bufmgr.h"
#include "access/transam.h"
/* XXX dependency problem */
#include "access/transam.h"
/* XXX dependency problem */
#include "utils/tqual.h"
#include "utils/tqual.h"
#include "utils/syscache.h"
#include "utils/syscache.h"
#include "storage/bufpage.h"
/* for page layout, for InitMyDatabaseId() */
#include "storage/bufpage.h"
/* for page layout, for InitMyDatabaseId() */
#include "storage/sinval.h"
#include "storage/sinval.h"
#include "storage/sinvaladt.h"
#include "storage/sinvaladt.h"
#include "storage/lmgr.h"
#include "storage/lmgr.h"
#include "miscadmin.h"
/* for global decls */
#include "miscadmin.h"
/* for global decls */
#include "utils/portal.h"
/* for EnablePortalManager, etc. */
#include "utils/portal.h"
/* for EnablePortalManager, etc. */
#include "utils/exc.h"
/* for EnableExceptionHandling, etc. */
#include "utils/exc.h"
/* for EnableExceptionHandling, etc. */
#include "fmgr.h"
/* for EnableDynamicFunctionManager, etc. */
#include "fmgr.h"
/* for EnableDynamicFunctionManager, etc. */
#include "utils/elog.h"
#include "utils/elog.h"
#include "utils/palloc.h"
#include "utils/palloc.h"
#include "utils/mcxt.h"
/* for EnableMemoryContext, etc. */
#include "utils/mcxt.h"
/* for EnableMemoryContext, etc. */
#include "catalog/catname.h"
#include "catalog/catname.h"
#include "catalog/pg_database.h"
#include "catalog/pg_database.h"
...
@@ -70,54 +72,54 @@
...
@@ -70,54 +72,54 @@
#include "libpq/libpq-be.h"
#include "libpq/libpq-be.h"
static
IPCKey
PostgresIpcKey
;
static
IPCKey
PostgresIpcKey
;
#ifndef
private
#ifndef
private
#ifndef
EBUG
#ifndef
EBUG
#define
private
static
#define
private
static
#else
/* !defined(EBUG) */
#else
/* !defined(EBUG) */
#define private
#define private
#endif
/* !defined(EBUG) */
#endif
/* !defined(EBUG) */
#endif
/* !defined(private) */
#endif
/* !defined(private) */
/* ----------------------------------------------------------------
/* ----------------------------------------------------------------
*
InitPostgres support
*
InitPostgres support
* ----------------------------------------------------------------
* ----------------------------------------------------------------
*/
*/
/* --------------------------------
/* --------------------------------
* InitMyDatabaseId() -- Find and record the OID of the database we are
* InitMyDatabaseId() -- Find and record the OID of the database we are
*
to open.
*
to open.
*
*
*
The database's oid forms half of the unique key for the system
*
The database's oid forms half of the unique key for the system
*
caches and lock tables. We therefore want it initialized before
*
caches and lock tables. We therefore want it initialized before
*
we open any relations, since opening relations puts things in the
*
we open any relations, since opening relations puts things in the
*
cache. To get around this problem, this code opens and scans the
*
cache. To get around this problem, this code opens and scans the
*
pg_database relation by hand.
*
pg_database relation by hand.
*
*
*
This algorithm relies on the fact that first attribute in the
*
This algorithm relies on the fact that first attribute in the
*
pg_database relation schema is the database name. It also knows
*
pg_database relation schema is the database name. It also knows
*
about the internal format of tuples on disk and the length of
*
about the internal format of tuples on disk and the length of
*
the datname attribute. It knows the location of the pg_database
*
the datname attribute. It knows the location of the pg_database
*
file.
*
file.
*
*
*
This code is called from InitDatabase(), after we chdir() to the
*
This code is called from InitDatabase(), after we chdir() to the
*
database directory but before we open any relations.
*
database directory but before we open any relations.
* --------------------------------
* --------------------------------
*/
*/
void
void
InitMyDatabaseId
()
InitMyDatabaseId
()
{
{
int
dbfd
;
int
dbfd
;
int
fileflags
;
int
fileflags
;
int
nbytes
;
int
nbytes
;
int
max
,
i
;
int
max
,
i
;
HeapTuple
tup
;
HeapTuple
tup
;
Page
pg
;
Page
pg
;
PageHeader
ph
;
PageHeader
ph
;
char
*
dbfname
;
char
*
dbfname
;
Form_pg_database
tup_db
;
Form_pg_database
tup_db
;
/*
/*
* At bootstrap time, we don't need to check the oid of the database
* At bootstrap time, we don't need to check the oid of the database
...
@@ -126,8 +128,8 @@ InitMyDatabaseId()
...
@@ -126,8 +128,8 @@ InitMyDatabaseId()
*/
*/
if
(
IsBootstrapProcessingMode
())
{
if
(
IsBootstrapProcessingMode
())
{
LockDisable
(
true
);
LockDisable
(
true
);
return
;
return
;
}
}
dbfname
=
(
char
*
)
palloc
(
strlen
(
DataDir
)
+
strlen
(
"pg_database"
)
+
2
);
dbfname
=
(
char
*
)
palloc
(
strlen
(
DataDir
)
+
strlen
(
"pg_database"
)
+
2
);
...
@@ -138,14 +140,14 @@ InitMyDatabaseId()
...
@@ -138,14 +140,14 @@ InitMyDatabaseId()
#endif
/* WIN32 */
#endif
/* WIN32 */
if
((
dbfd
=
open
(
dbfname
,
O_RDONLY
,
0666
))
<
0
)
if
((
dbfd
=
open
(
dbfname
,
O_RDONLY
,
0666
))
<
0
)
elog
(
FATAL
,
"Cannot open %s"
,
dbfname
);
elog
(
FATAL
,
"Cannot open %s"
,
dbfname
);
pfree
(
dbfname
);
pfree
(
dbfname
);
/* ----------------
/* ----------------
*
read and examine every page in pg_database
*
read and examine every page in pg_database
*
*
*
Raw I/O! Read those tuples the hard way! Yow!
*
Raw I/O! Read those tuples the hard way! Yow!
*
*
* Why don't we use the access methods or move this code
* Why don't we use the access methods or move this code
* someplace else? This is really pg_database schema dependent
* someplace else? This is really pg_database schema dependent
...
@@ -163,58 +165,58 @@ InitMyDatabaseId()
...
@@ -163,58 +165,58 @@ InitMyDatabaseId()
ph
=
(
PageHeader
)
pg
;
ph
=
(
PageHeader
)
pg
;
while
((
nbytes
=
read
(
dbfd
,
pg
,
BLCKSZ
))
==
BLCKSZ
)
{
while
((
nbytes
=
read
(
dbfd
,
pg
,
BLCKSZ
))
==
BLCKSZ
)
{
max
=
PageGetMaxOffsetNumber
(
pg
);
max
=
PageGetMaxOffsetNumber
(
pg
);
/* look at each tuple on the page */
/* look at each tuple on the page */
for
(
i
=
0
;
i
<=
max
;
i
++
)
{
for
(
i
=
0
;
i
<=
max
;
i
++
)
{
int
offset
;
int
offset
;
/* if it's a freed tuple, ignore it */
/* if it's a freed tuple, ignore it */
if
(
!
(
ph
->
pd_linp
[
i
].
lp_flags
&
LP_USED
))
if
(
!
(
ph
->
pd_linp
[
i
].
lp_flags
&
LP_USED
))
continue
;
continue
;
/* get a pointer to the tuple itself */
/* get a pointer to the tuple itself */
offset
=
(
int
)
ph
->
pd_linp
[
i
].
lp_off
;
offset
=
(
int
)
ph
->
pd_linp
[
i
].
lp_off
;
tup
=
(
HeapTuple
)
(((
char
*
)
pg
)
+
offset
);
tup
=
(
HeapTuple
)
(((
char
*
)
pg
)
+
offset
);
/*
/*
* if the tuple has been deleted (the database was destroyed),
* if the tuple has been deleted (the database was destroyed),
* skip this tuple. XXX warning, will robinson: violation of
* skip this tuple. XXX warning, will robinson: violation of
* transaction semantics happens right here. we should check
* transaction semantics happens right here. we should check
* to be sure that the xact that deleted this tuple actually
* to be sure that the xact that deleted this tuple actually
* committed. only way to do this at init time is to paw over
* committed. only way to do this at init time is to paw over
* the log relation by hand, too. let's be optimistic.
* the log relation by hand, too. let's be optimistic.
*
*
* XXX This is an evil type cast. tup->t_xmax is char[5] while
* XXX This is an evil type cast. tup->t_xmax is char[5] while
* TransactionId is struct * { char data[5] }. It works but
* TransactionId is struct * { char data[5] }. It works but
* if data is ever moved and no longer the first field this
* if data is ever moved and no longer the first field this
* will be broken!! -mer 11 Nov 1991.
* will be broken!! -mer 11 Nov 1991.
*/
*/
if
(
TransactionIdIsValid
((
TransactionId
)
tup
->
t_xmax
))
if
(
TransactionIdIsValid
((
TransactionId
)
tup
->
t_xmax
))
continue
;
continue
;
/*
/*
* Okay, see if this is the one we want.
* Okay, see if this is the one we want.
*
XXX 1 july 91: mao and mer discover that tuples now squash
*
XXX 1 july 91: mao and mer discover that tuples now squash
*
t_bits. Why is this?
*
t_bits. Why is this?
*
*
* 24 july 92: mer realizes that the t_bits field is only
* 24 july 92: mer realizes that the t_bits field is only
* used in the event of null values. If no
* used in the event of null values. If no
* fields are null we reduce the header size
* fields are null we reduce the header size
* by doing the squash. t_hoff tells you exactly
* by doing the squash. t_hoff tells you exactly
* how big the header actually is. use the PC
* how big the header actually is. use the PC
* means of getting at sys cat attrs.
* means of getting at sys cat attrs.
*/
*/
tup_db
=
(
Form_pg_database
)
GETSTRUCT
(
tup
);
tup_db
=
(
Form_pg_database
)
GETSTRUCT
(
tup
);
if
(
strncmp
(
GetDatabaseName
(),
if
(
strncmp
(
GetDatabaseName
(),
&
(
tup_db
->
datname
.
data
[
0
]),
&
(
tup_db
->
datname
.
data
[
0
]),
16
)
==
0
)
16
)
==
0
)
{
{
MyDatabaseId
=
tup
->
t_oid
;
MyDatabaseId
=
tup
->
t_oid
;
goto
done
;
goto
done
;
}
}
}
}
}
}
done:
done:
...
@@ -222,84 +224,121 @@ InitMyDatabaseId()
...
@@ -222,84 +224,121 @@ InitMyDatabaseId()
pfree
(
pg
);
pfree
(
pg
);
if
(
!
OidIsValid
(
MyDatabaseId
))
if
(
!
OidIsValid
(
MyDatabaseId
))
elog
(
FATAL
,
elog
(
FATAL
,
"Database %s does not exist in %s"
,
"Database %s does not exist in %s"
,
GetDatabaseName
(),
GetDatabaseName
(),
DatabaseRelationName
);
DatabaseRelationName
);
}
}
/*
/*
* DoChdirAndInitDatabaseNameAndPath --
* 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:
* Arguments:
* Path and name are invalid if it invalid as a string.
* Path and name are invalid if it invalid as a string.
* Path is "badly formated" if it is not a string containing a path
* Path is "badly formated" if it is not a string containing a path
* to a writable directory.
* to a writable directory.
* Name is "badly formated" if it contains more than 16 characters or if
* 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).
* 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:
* Exceptions:
* BadState if called more than once.
* BadState if called more than once.
* BadArg if both path and name are "badly formated" or invalid.
* BadArg if both path and name are "badly formated" or invalid.
* BadArg if path and name are both "inconsistent" and valid.
* BadArg if path and name are both "inconsistent" and valid.
*/
/* ----------------
* DoChdirAndInitDatabaseNameAndPath
*
*
* this just chdir's to the proper data/base directory
* This routine is inappropriate in bootstrap mode, since the directories
* XXX clean this up more.
* and version files need not exist yet if we're in bootstrap mode.
*
* XXX The following code is an incorrect of the semantics
* XXX described in the header file. Handling of defaults
* XXX should happen here, too.
* ----------------
*/
*/
void
static
void
DoChdirAndInitDatabaseNameAndPath
(
char
*
name
,
/* name of database */
DoChdirAndInitDatabaseNameAndPath
(
char
*
name
)
{
char
*
path
)
/* full path to database */
char
*
reason
;
{
/* Failure reason returned by some function. NULL if no failure */
/* ----------------
#ifndef WIN32
* check the path
struct
stat
statbuf
;
* ----------------
#else
*/
struct
_stat
statbuf
;
if
(
path
)
#endif
SetDatabasePath
(
path
);
char
errormsg
[
1000
];
else
elog
(
FATAL
,
"DoChdirAndInitDatabaseNameAndPath: path:%s is not valid"
,
if
(
stat
(
DataDir
,
&
statbuf
)
<
0
)
path
);
sprintf
(
errormsg
,
"Database system does not exist. "
"PGDATA directory '%s' not found. Normally, you "
/* ----------------
"create a database system by running initdb."
,
* check the name
DataDir
);
* ----------------
else
{
*/
char
myPath
[
MAXPGPATH
];
/* DatabasePath points here! */
if
(
name
)
SetDatabaseName
(
name
);
if
(
strlen
(
DataDir
)
+
strlen
(
name
)
+
10
>
sizeof
(
myPath
))
else
sprintf
(
errormsg
,
"Internal error in postinit.c: database "
elog
(
FATAL
,
"DoChdirAndInitDatabaseNameAndPath: name:%s is not valid"
,
"pathname exceeds maximum allowable length."
);
name
);
else
{
sprintf
(
myPath
,
"%s/base/%s"
,
DataDir
,
name
);
/* ----------------
* change to the directory, or die trying.
if
(
stat
(
myPath
,
&
statbuf
)
<
0
)
*
sprintf
(
errormsg
,
* XXX unless the path hasn't been set because we're bootstrapping.
"Database '%s' does not exist. "
* HP-UX doesn't like chdir("") so check for that case before
"(We know this because the directory '%s' "
* doing anything drastic.
"does not exist). You can create a database "
* ----------------
"with the SQL command CREATE DATABASE. To see "
*/
"what databases exist, look at the subdirectories "
if
(
*
path
&&
(
chdir
(
path
)
<
0
))
"of '%s/base/'."
,
elog
(
FATAL
,
"DoChdirAndInitDatabaseNameAndPath: chdir(
\"
%s
\"
): %m"
,
name
,
myPath
,
DataDir
);
path
);
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
);
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
*
InitUserid
*
*
*
initializes crap associated with the user id.
*
initializes crap associated with the user id.
* --------------------------------
* --------------------------------
*/
*/
void
void
...
@@ -310,35 +349,35 @@ InitUserid()
...
@@ -310,35 +349,35 @@ InitUserid()
}
}
/* --------------------------------
/* --------------------------------
*
InitCommunication
*
InitCommunication
*
*
*
This routine initializes stuff needed for ipc, locking, etc.
*
This routine initializes stuff needed for ipc, locking, etc.
*
it should be called something more informative.
*
it should be called something more informative.
*
*
* Note:
* Note:
*
This does not set MyBackendId. MyBackendTag is set, however.
*
This does not set MyBackendId. MyBackendTag is set, however.
* --------------------------------
* --------------------------------
*/
*/
void
void
InitCommunication
()
InitCommunication
()
{
{
char
*
getenv
();
/* XXX style */
char
*
getenv
();
/* XXX style */
char
*
postid
;
char
*
postid
;
char
*
postport
;
char
*
postport
;
IPCKey
key
=
0
;
IPCKey
key
=
0
;
/* ----------------
/* ----------------
*
try and get the backend tag from POSTID
*
try and get the backend tag from POSTID
* ----------------
* ----------------
*/
*/
MyBackendId
=
-
1
;
MyBackendId
=
-
1
;
postid
=
getenv
(
"POSTID"
);
postid
=
getenv
(
"POSTID"
);
if
(
!
PointerIsValid
(
postid
))
{
if
(
!
PointerIsValid
(
postid
))
{
MyBackendTag
=
-
1
;
MyBackendTag
=
-
1
;
}
else
{
}
else
{
MyBackendTag
=
atoi
(
postid
);
MyBackendTag
=
atoi
(
postid
);
Assert
(
MyBackendTag
>=
0
);
Assert
(
MyBackendTag
>=
0
);
}
}
/* ----------------
/* ----------------
...
@@ -348,62 +387,62 @@ InitCommunication()
...
@@ -348,62 +387,62 @@ InitCommunication()
postport
=
getenv
(
"POSTPORT"
);
postport
=
getenv
(
"POSTPORT"
);
if
(
PointerIsValid
(
postport
))
{
if
(
PointerIsValid
(
postport
))
{
SystemPortAddress
address
=
atoi
(
postport
);
SystemPortAddress
address
=
atoi
(
postport
);
if
(
address
==
0
)
if
(
address
==
0
)
elog
(
FATAL
,
"InitCommunication: invalid POSTPORT"
);
elog
(
FATAL
,
"InitCommunication: invalid POSTPORT"
);
if
(
MyBackendTag
==
-
1
)
if
(
MyBackendTag
==
-
1
)
elog
(
FATAL
,
"InitCommunication: missing POSTID"
);
elog
(
FATAL
,
"InitCommunication: missing POSTID"
);
key
=
SystemPortAddressCreateIPCKey
(
address
);
key
=
SystemPortAddressCreateIPCKey
(
address
);
/*
/*
* Enable this if you are trying to force the backend to run as if it
* Enable this if you are trying to force the backend to run as if it
* is running under the postmaster.
* is running under the postmaster.
*
*
* This goto forces Postgres to attach to shared memory instead of
* This goto forces Postgres to attach to shared memory instead of
* using malloc'ed memory (which is the normal behavior if run
* using malloc'ed memory (which is the normal behavior if run
* directly).
* directly).
*
*
* To enable emulation, run the following shell commands (in addition
* To enable emulation, run the following shell commands (in addition
* to enabling this goto)
* to enabling this goto)
*
*
* % setenv POSTID 1
* % setenv POSTID 1
* % setenv POSTPORT 4321
* % setenv POSTPORT 4321
* % postmaster &
* % postmaster &
* % kill -9 %1
* % kill -9 %1
*
*
* Upon doing this, Postmaster will have allocated the shared memory
* Upon doing this, Postmaster will have allocated the shared memory
* resources that Postgres will attach to if you enable
* resources that Postgres will attach to if you enable
* EMULATE_UNDER_POSTMASTER.
* EMULATE_UNDER_POSTMASTER.
*
*
* This comment may well age with time - it is current as of
* This comment may well age with time - it is current as of
* 8 January 1990
* 8 January 1990
*
*
* Greg
* Greg
*/
*/
#ifdef EMULATE_UNDER_POSTMASTER
#ifdef EMULATE_UNDER_POSTMASTER
goto
forcesharedmemory
;
goto
forcesharedmemory
;
#endif
#endif
}
else
if
(
IsUnderPostmaster
)
{
}
else
if
(
IsUnderPostmaster
)
{
elog
(
FATAL
,
elog
(
FATAL
,
"InitCommunication: under postmaster and POSTPORT not set"
);
"InitCommunication: under postmaster and POSTPORT not set"
);
}
else
{
}
else
{
/* ----------------
/* ----------------
* assume we're running a postgres backend by itself with
* assume we're running a postgres backend by itself with
* no front end or postmaster.
* no front end or postmaster.
* ----------------
* ----------------
*/
*/
if
(
MyBackendTag
==
-
1
)
{
if
(
MyBackendTag
==
-
1
)
{
MyBackendTag
=
1
;
MyBackendTag
=
1
;
}
}
key
=
PrivateIPCKey
;
key
=
PrivateIPCKey
;
}
}
/* ----------------
/* ----------------
...
@@ -422,11 +461,11 @@ InitCommunication()
...
@@ -422,11 +461,11 @@ InitCommunication()
/* --------------------------------
/* --------------------------------
*
InitStdio
*
InitStdio
*
*
*
this routine consists of a bunch of code fragments
*
this routine consists of a bunch of code fragments
*
that used to be randomly scattered through cinit().
*
that used to be randomly scattered through cinit().
*
they all seem to do stuff associated with io.
*
they all seem to do stuff associated with io.
* --------------------------------
* --------------------------------
*/
*/
void
void
...
@@ -437,10 +476,10 @@ InitStdio()
...
@@ -437,10 +476,10 @@ InitStdio()
/* --------------------------------
/* --------------------------------
* InitPostgres --
* InitPostgres --
*
Initialize POSTGRES.
*
Initialize POSTGRES.
*
*
* Note:
* Note:
*
Be very careful with the order of calls in the InitPostgres function.
*
Be very careful with the order of calls in the InitPostgres function.
* --------------------------------
* --------------------------------
*/
*/
bool
PostgresIsInitialized
=
false
;
bool
PostgresIsInitialized
=
false
;
...
@@ -452,49 +491,49 @@ extern int NBuffers;
...
@@ -452,49 +491,49 @@ extern int NBuffers;
* applications.
* applications.
*/
*/
/*int
testFlag = 0;*/
/*int
testFlag = 0;*/
int
lockingOff
=
0
;
int
lockingOff
=
0
;
/*
/*
*/
*/
void
void
InitPostgres
(
char
*
name
)
/* database name */
InitPostgres
(
char
*
name
)
/* database name */
{
{
bool
bootstrap
;
/* true if BootstrapProcessing */
bool
bootstrap
;
/* true if BootstrapProcessing */
/* ----------------
/* ----------------
*
see if we're running in BootstrapProcessing mode
*
see if we're running in BootstrapProcessing mode
* ----------------
* ----------------
*/
*/
bootstrap
=
IsBootstrapProcessingMode
();
bootstrap
=
IsBootstrapProcessingMode
();
/* ----------------
/* ----------------
*
turn on the exception handler. Note: we cannot use elog, Assert,
*
turn on the exception handler. Note: we cannot use elog, Assert,
* AssertState, etc. until after exception handling is on.
* AssertState, etc. until after exception handling is on.
* ----------------
* ----------------
*/
*/
EnableExceptionHandling
(
true
);
EnableExceptionHandling
(
true
);
/* ----------------
/* ----------------
*
A stupid check to make sure we don't call this more than once.
*
A stupid check to make sure we don't call this more than once.
* But things like ReinitPostgres() get around this by just diddling
* But things like ReinitPostgres() get around this by just diddling
*
the PostgresIsInitialized flag.
*
the PostgresIsInitialized flag.
* ----------------
* ----------------
*/
*/
AssertState
(
!
PostgresIsInitialized
);
AssertState
(
!
PostgresIsInitialized
);
/* ----------------
/* ----------------
*
Memory system initialization.
*
Memory system initialization.
* (we may call palloc after EnableMemoryContext())
* (we may call palloc after EnableMemoryContext())
*
*
* Note EnableMemoryContext() must happen before EnablePortalManager().
* Note EnableMemoryContext() must happen before EnablePortalManager().
* ----------------
* ----------------
*/
*/
EnableMemoryContext
(
true
);
/* initializes the "top context" */
EnableMemoryContext
(
true
);
/* initializes the "top context" */
EnablePortalManager
(
true
);
/* memory for portal/transaction stuff */
EnablePortalManager
(
true
);
/* memory for portal/transaction stuff */
/* ----------------
/* ----------------
*
initialize the backend local portal stack used by
*
initialize the backend local portal stack used by
* internal PQ function calls. see src/lib/libpq/be-dumpdata.c
* internal PQ function calls. see src/lib/libpq/be-dumpdata.c
* This is different from the "portal manager" so this goes here.
* This is different from the "portal manager" so this goes here.
* -cim 2/12/91
* -cim 2/12/91
...
@@ -503,7 +542,7 @@ InitPostgres(char *name) /* database name */
...
@@ -503,7 +542,7 @@ InitPostgres(char *name) /* database name */
be_portalinit
();
be_portalinit
();
/* ----------------
/* ----------------
*
attach to shared memory and semaphores, and initialize our
*
attach to shared memory and semaphores, and initialize our
* input/output/debugging file descriptors.
* input/output/debugging file descriptors.
* ----------------
* ----------------
*/
*/
...
@@ -518,48 +557,20 @@ InitPostgres(char *name) /* database name */
...
@@ -518,48 +557,20 @@ InitPostgres(char *name) /* database name */
if
(
!
TransactionFlushEnabled
())
if
(
!
TransactionFlushEnabled
())
on_exitpg
(
FlushBufferPool
,
(
caddr_t
)
NULL
);
on_exitpg
(
FlushBufferPool
,
(
caddr_t
)
NULL
);
/* ----------------
if
(
bootstrap
)
{
* check for valid "meta gunk" (??? -cim 10/5/90) and change to
SetDatabasePath
(
"."
);
* database directory.
SetDatabaseName
(
name
);
*
}
else
{
* Note: DatabaseName, MyDatabaseName, and DatabasePath are all
DoChdirAndInitDatabaseNameAndPath
(
name
);
* 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
);
}
}
/* ********************************
/* ********************************
*
code after this point assumes we are in the proper directory!
*
code after this point assumes we are in the proper directory!
* ********************************
* ********************************
*/
*/
/* ----------------
/* ----------------
*
initialize the database id used for system caches and lock tables
*
initialize the database id used for system caches and lock tables
* ----------------
* ----------------
*/
*/
InitMyDatabaseId
();
InitMyDatabaseId
();
...
@@ -567,7 +578,7 @@ InitPostgres(char *name) /* database name */
...
@@ -567,7 +578,7 @@ InitPostgres(char *name) /* database name */
smgrinit
();
smgrinit
();
/* ----------------
/* ----------------
*
initialize the transaction system and the relation descriptor
*
initialize the transaction system and the relation descriptor
* cache. Note we have to make certain the lock manager is off while
* cache. Note we have to make certain the lock manager is off while
* we do this.
* we do this.
* ----------------
* ----------------
...
@@ -582,13 +593,13 @@ InitPostgres(char *name) /* database name */
...
@@ -582,13 +593,13 @@ InitPostgres(char *name) /* database name */
* we only lock it to examine AMI transaction status, and this is
* we only lock it to examine AMI transaction status, and this is
* never written after initdb is done. -mer 15 June 1992
* never written after initdb is done. -mer 15 June 1992
*/
*/
RelationInitialize
();
/* pre-allocated reldescs created here */
RelationInitialize
();
/* pre-allocated reldescs created here */
InitializeTransactionSystem
();
/* pg_log,etc init/crash recovery here */
InitializeTransactionSystem
();
/* pg_log,etc init/crash recovery here */
LockDisable
(
false
);
LockDisable
(
false
);
/* ----------------
/* ----------------
*
anyone knows what this does? something having to do with
*
anyone knows what this does? something having to do with
* system catalog cache invalidation in the case of multiple
* system catalog cache invalidation in the case of multiple
* backends, I think -cim 10/3/90
* backends, I think -cim 10/3/90
* Sets up MyBackendId a unique backend identifier.
* Sets up MyBackendId a unique backend identifier.
...
@@ -605,9 +616,9 @@ InitPostgres(char *name) /* database name */
...
@@ -605,9 +616,9 @@ InitPostgres(char *name) /* database name */
InitProcess
(
PostgresIpcKey
);
InitProcess
(
PostgresIpcKey
);
if
(
MyBackendId
>
MaxBackendId
||
MyBackendId
<=
0
)
{
if
(
MyBackendId
>
MaxBackendId
||
MyBackendId
<=
0
)
{
elog
(
FATAL
,
"cinit2: bad backend id %d (%d)"
,
elog
(
FATAL
,
"cinit2: bad backend id %d (%d)"
,
MyBackendTag
,
MyBackendTag
,
MyBackendId
);
MyBackendId
);
}
}
/* ----------------
/* ----------------
...
@@ -617,7 +628,7 @@ InitPostgres(char *name) /* database name */
...
@@ -617,7 +628,7 @@ InitPostgres(char *name) /* database name */
initam
();
initam
();
/* ----------------
/* ----------------
*
initialize all the system catalog caches.
*
initialize all the system catalog caches.
* ----------------
* ----------------
*/
*/
zerocaches
();
zerocaches
();
...
@@ -632,7 +643,7 @@ InitPostgres(char *name) /* database name */
...
@@ -632,7 +643,7 @@ InitPostgres(char *name) /* database name */
InitUserid
();
InitUserid
();
/* ----------------
/* ----------------
*
ok, all done, now let's make sure we don't do it again.
*
ok, all done, now let's make sure we don't do it again.
* ----------------
* ----------------
*/
*/
PostgresIsInitialized
=
true
;
PostgresIsInitialized
=
true
;
...
@@ -644,10 +655,10 @@ InitPostgres(char *name) /* database name */
...
@@ -644,10 +655,10 @@ InitPostgres(char *name) /* database name */
* ----------------
* ----------------
*/
*/
if
(
!
bootstrap
)
if
(
!
bootstrap
)
SetProcessingMode
(
NormalProcessing
);
SetProcessingMode
(
NormalProcessing
);
/* if (testFlag || lockingOff) */
/* if (testFlag || lockingOff) */
if
(
lockingOff
)
if
(
lockingOff
)
LockDisable
(
true
);
LockDisable
(
true
);
}
}
src/bin/pg_version/Makefile
View file @
17befd6c
...
@@ -7,20 +7,34 @@
...
@@ -7,20 +7,34 @@
#
#
#
#
# IDENTIFICATION
# 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
SRCDIR
=
../..
MKDIR
=
../../mk
include
$(MKDIR)/postgres.mk
include
../Makefile.global
include
../Makefile.global
include
../../Makefile.global
OBJS
=
pg_version.o ../../utils/version.o
all
:
pg_version
pg_version
:
submake $(OBJS)
$(CC)
$(LDFLAGS)
-o
pg_version
$(OBJS)
$(LD_ADD)
.PHONY
:
submake
submake
:
$(MAKE)
-C
../../utils version.o
VPATH
:=
$(VPATH)
:
$(srcdir)
/backend/utils/init
install
:
pg_version
SRCS
=
pg_version.c magic.c
$(INSTALL)
$(INSTL_EXE_OPTS)
pg_version
$(DESTDIR)$(BINDIR)
/pg_version
CFLAGS
+=
-I
$(srcdir)
/backend/port/
$(PORTNAME)
depend dep
:
$(CC)
-MM
$(INCLUDE_OPT)
*
.c
>
depend
include
$(MKDIR)/postgres.prog.mk
clean
:
rm
-f
pg_version pg_version.o
ifeq
(depend,$(wildcard depend))
include
depend
endif
src/bin/pg_version/pg_version.c
View file @
17befd6c
...
@@ -7,38 +7,34 @@
...
@@ -7,38 +7,34 @@
*
*
*
*
* IDENTIFICATION
* 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 <stdlib.h>
#include <stdio.h>
#include <stdio.h>
int
Noversion
=
0
;
#include <version.h>
/* interface to SetPgVersion */
char
*
DataDir
=
(
char
*
)
NULL
;
extern
void
SetPgVersion
(
const
char
*
);
int
int
main
(
int
argc
,
char
**
argv
)
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
)
{
if
(
argc
<
2
)
{
fprintf
(
stderr
,
"pg_version: missing argument
\n
"
);
fprintf
(
stderr
,
"pg_version: missing argument
\n
"
);
exit
(
1
);
exit
(
1
);
}
}
SetPgVersion
(
argv
[
1
]);
SetPgVersion
(
argv
[
1
],
&
reason
);
return
(
0
);
if
(
reason
)
{
}
fprintf
(
stderr
,
"pg_version is unable to create the PG_VERSION file. "
void
elog
(
void
);
/* make compiler happy */
"SetPgVersion gave this reason: %s
\n
"
,
reason
);
void
retcode
=
10
;
elog
(
void
)
{}
}
else
retcode
=
0
;
return
(
retcode
);
int
GetDataHome
(
void
);
/* make compiler happy */
int
GetDataHome
(
void
)
{
return
(
0
);
}
}
src/include/miscadmin.h
View file @
17befd6c
...
@@ -12,7 +12,7 @@
...
@@ -12,7 +12,7 @@
*
*
* Copyright (c) 1994, Regents of the University of California
* 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
* NOTES
* some of the information in this file will be moved to
* some of the information in this file will be moved to
...
@@ -69,14 +69,6 @@ extern Oid LastOidProcessed; /* for query rewrite */
...
@@ -69,14 +69,6 @@ extern Oid LastOidProcessed; /* for query rewrite */
*/
*/
#define NDBUFS 64
#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 -- *
* pdir.h -- *
* POSTGRES directory path definitions. *
* POSTGRES directory path definitions. *
...
@@ -148,7 +140,6 @@ typedef int16 ExitStatus;
...
@@ -148,7 +140,6 @@ typedef int16 ExitStatus;
/* in utils/init/postinit.c */
/* in utils/init/postinit.c */
extern
void
InitMyDatabaseId
(
void
);
extern
void
InitMyDatabaseId
(
void
);
extern
void
DoChdirAndInitDatabaseNameAndPath
(
char
*
name
,
char
*
path
);
extern
void
InitUserid
(
void
);
extern
void
InitUserid
(
void
);
extern
void
InitCommunication
(
void
);
extern
void
InitCommunication
(
void
);
extern
void
InitStdio
(
void
);
extern
void
InitStdio
(
void
);
...
@@ -170,12 +161,4 @@ extern bool IsNormalProcessingMode(void);
...
@@ -170,12 +161,4 @@ extern bool IsNormalProcessingMode(void);
extern
void
SetProcessingMode
(
ProcessingMode
mode
);
extern
void
SetProcessingMode
(
ProcessingMode
mode
);
extern
ProcessingMode
GetProcessingMode
(
void
);
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 */
#endif
/* MISCADMIN_H */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment