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
abb0e707
Commit
abb0e707
authored
Oct 02, 1997
by
Vadim B. Mikheev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Dump DEFAULT, CHECK, Triggers.
Fix BASETYPE for aggregates with sfunc2 only.
parent
1b677e7e
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
326 additions
and
41 deletions
+326
-41
src/bin/pg_dump/common.c
src/bin/pg_dump/common.c
+3
-3
src/bin/pg_dump/pg_dump.c
src/bin/pg_dump/pg_dump.c
+316
-34
src/bin/pg_dump/pg_dump.h
src/bin/pg_dump/pg_dump.h
+7
-4
No files found.
src/bin/pg_dump/common.c
View file @
abb0e707
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/bin/pg_dump/common.c,v 1.1
6 1997/09/08 21:49:50 momjian
Exp $
* $Header: /cvsroot/pgsql/src/bin/pg_dump/common.c,v 1.1
7 1997/10/02 13:57:03 vadim
Exp $
*
* Modifications - 6/12/96 - dave@bensoft.com - version 1.13.dhb.2
*
...
...
@@ -262,7 +262,7 @@ dumpSchema(FILE *fout,
if
(
g_verbose
)
fprintf
(
stderr
,
"%s reading user-defined tables %s
\n
"
,
g_comment_start
,
g_comment_end
);
tblinfo
=
getTables
(
&
numTables
);
tblinfo
=
getTables
(
&
numTables
,
finfo
,
numFuncs
);
if
(
g_verbose
)
fprintf
(
stderr
,
"%s reading table inheritance information %s
\n
"
,
...
...
@@ -336,7 +336,7 @@ dumpSchema(FILE *fout,
*/
extern
void
dumpSchemaIdx
(
FILE
*
fout
,
int
*
numTablesPtr
,
const
char
*
tablename
,
dumpSchemaIdx
(
FILE
*
fout
,
const
char
*
tablename
,
TableInfo
*
tblinfo
,
int
numTables
)
{
int
numIndices
;
...
...
src/bin/pg_dump/pg_dump.c
View file @
abb0e707
...
...
@@ -21,7 +21,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.4
8 1997/09/24 16:20:04 momjian
Exp $
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.4
9 1997/10/02 13:57:05 vadim
Exp $
*
* Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb
*
...
...
@@ -61,6 +61,7 @@
#include "catalog/pg_type.h"
#include "catalog/pg_language.h"
#include "catalog/pg_index.h"
#include "catalog/pg_trigger.h"
#include "libpq-fe.h"
#ifndef HAVE_STRDUP
#include "strdup.h"
...
...
@@ -69,6 +70,8 @@
#include "pg_dump.h"
static
void
dumpSequence
(
FILE
*
fout
,
TableInfo
tbinfo
);
static
void
dumpTriggers
(
FILE
*
fout
,
const
char
*
tablename
,
TableInfo
*
tblinfo
,
int
numTables
);
static
char
*
checkForQuote
(
const
char
*
s
);
static
void
clearTableInfo
(
TableInfo
*
,
int
);
static
void
...
...
@@ -406,31 +409,37 @@ dumpClasses(const TableInfo tblinfo[], const int numTables, FILE *fout,
fprintf
(
stderr
,
"%s dumping out the contents of %s of %d tables %s
\n
"
,
g_comment_start
,
all_only
,
numTables
,
g_comment_end
);
/* Dump SEQUENCEs first (if dataOnly) */
if
(
dataOnly
)
{
for
(
i
=
0
;
i
<
numTables
;
i
++
)
{
const
char
*
classname
=
tblinfo
[
i
].
relname
;
/* Skip VIEW relations */
if
(
isViewRule
(
tblinfo
[
i
].
relname
))
if
(
!
(
tblinfo
[
i
].
sequence
))
continue
;
if
(
!
onlytable
||
(
!
strcmp
(
classname
,
onlytable
)))
{
if
(
tblinfo
[
i
].
sequence
)
{
if
(
dataOnly
)
/* i.e. SCHEMA didn't dumped */
if
(
!
onlytable
||
(
!
strcmp
(
tblinfo
[
i
].
relname
,
onlytable
)))
{
if
(
g_verbose
)
fprintf
(
stderr
,
"%s dumping out schema of sequence %s %s
\n
"
,
g_comment_start
,
classname
,
g_comment_end
);
g_comment_start
,
tblinfo
[
i
].
relname
,
g_comment_end
);
fprintf
(
fout
,
"
\\
connect - %s
\n
"
,
tblinfo
[
i
].
usename
);
dumpSequence
(
fout
,
tblinfo
[
i
]);
}
else
if
(
g_verbose
)
fprintf
(
stderr
,
"%s contents of sequence '%s' dumped in schema %s
\n
"
,
g_comment_start
,
classname
,
g_comment_end
);
continue
;
}
}
for
(
i
=
0
;
i
<
numTables
;
i
++
)
{
const
char
*
classname
=
tblinfo
[
i
].
relname
;
/* Skip VIEW relations */
if
(
isViewRule
(
tblinfo
[
i
].
relname
))
continue
;
if
(
tblinfo
[
i
].
sequence
)
/* already dumped */
continue
;
if
(
!
onlytable
||
(
!
strcmp
(
classname
,
onlytable
)))
{
if
(
g_verbose
)
fprintf
(
stderr
,
"%s dumping out the contents of Table %s %s
\n
"
,
g_comment_start
,
classname
,
g_comment_end
);
...
...
@@ -572,8 +581,11 @@ main(int argc, char **argv)
dumpClasses
(
tblinfo
,
numTables
,
g_fout
,
tablename
,
oids
);
}
if
(
!
dataOnly
)
/* dump indexes at the end for performance */
dumpSchemaIdx
(
g_fout
,
&
numTables
,
tablename
,
tblinfo
,
numTables
);
if
(
!
dataOnly
)
/* dump indexes and triggers at the end for performance */
{
dumpSchemaIdx
(
g_fout
,
tablename
,
tblinfo
,
numTables
);
dumpTriggers
(
g_fout
,
tablename
,
tblinfo
,
numTables
);
}
fflush
(
g_fout
);
fclose
(
g_fout
);
...
...
@@ -1266,7 +1278,7 @@ getFuncs(int *numFuncs)
*
*/
TableInfo
*
getTables
(
int
*
numTables
)
getTables
(
int
*
numTables
,
FuncInfo
*
finfo
,
int
numFuncs
)
{
PGresult
*
res
;
int
ntups
;
...
...
@@ -1280,6 +1292,8 @@ getTables(int *numTables)
int
i_relkind
;
int
i_relacl
;
int
i_usename
;
int
i_relchecks
;
int
i_reltriggers
;
/*
* find all the user-defined tables (no indices and no catalogs),
...
...
@@ -1299,7 +1313,8 @@ getTables(int *numTables)
PQclear
(
res
);
sprintf
(
query
,
"SELECT pg_class.oid, relname, relarch, relkind, relacl, usename "
"SELECT pg_class.oid, relname, relarch, relkind, relacl, usename, "
"relchecks, reltriggers "
"from pg_class, pg_user "
"where relowner = usesysid and "
"(relkind = 'r' or relkind = 'S') and relname !~ '^pg_' "
...
...
@@ -1325,6 +1340,8 @@ getTables(int *numTables)
i_relkind
=
PQfnumber
(
res
,
"relkind"
);
i_relacl
=
PQfnumber
(
res
,
"relacl"
);
i_usename
=
PQfnumber
(
res
,
"usename"
);
i_relchecks
=
PQfnumber
(
res
,
"relchecks"
);
i_reltriggers
=
PQfnumber
(
res
,
"reltriggers"
);
for
(
i
=
0
;
i
<
ntups
;
i
++
)
{
...
...
@@ -1334,6 +1351,192 @@ getTables(int *numTables)
tblinfo
[
i
].
relacl
=
strdup
(
PQgetvalue
(
res
,
i
,
i_relacl
));
tblinfo
[
i
].
sequence
=
(
strcmp
(
PQgetvalue
(
res
,
i
,
i_relkind
),
"S"
)
==
0
);
tblinfo
[
i
].
usename
=
strdup
(
PQgetvalue
(
res
,
i
,
i_usename
));
tblinfo
[
i
].
ncheck
=
atoi
(
PQgetvalue
(
res
,
i
,
i_relchecks
));
tblinfo
[
i
].
ntrig
=
atoi
(
PQgetvalue
(
res
,
i
,
i_reltriggers
));
/* Get CHECK constraints */
if
(
tblinfo
[
i
].
ncheck
>
0
)
{
PGresult
*
res2
;
int
i_rcname
,
i_rcsrc
;
int
ntups2
;
int
i2
;
if
(
g_verbose
)
fprintf
(
stderr
,
"%s finding CHECK constraints for relation: %s %s
\n
"
,
g_comment_start
,
tblinfo
[
i
].
relname
,
g_comment_end
);
sprintf
(
query
,
"SELECT rcname, rcsrc from pg_relcheck "
"where rcrelid = '%s'::oid "
,
tblinfo
[
i
].
oid
);
res2
=
PQexec
(
g_conn
,
query
);
if
(
!
res2
||
PQresultStatus
(
res2
)
!=
PGRES_TUPLES_OK
)
{
fprintf
(
stderr
,
"getTables(): SELECT (for CHECK) failed
\n
"
);
exit_nicely
(
g_conn
);
}
ntups2
=
PQntuples
(
res2
);
if
(
ntups2
!=
tblinfo
[
i
].
ncheck
)
{
fprintf
(
stderr
,
"getTables(): relation %s: %d CHECKs were expected, but got %d
\n
"
,
tblinfo
[
i
].
relname
,
tblinfo
[
i
].
ncheck
,
ntups2
);
exit_nicely
(
g_conn
);
}
i_rcname
=
PQfnumber
(
res2
,
"rcname"
);
i_rcsrc
=
PQfnumber
(
res2
,
"rcsrc"
);
tblinfo
[
i
].
check_expr
=
(
char
**
)
malloc
(
ntups2
*
sizeof
(
char
*
));
for
(
i2
=
0
;
i2
<
ntups2
;
i2
++
)
{
char
*
name
=
PQgetvalue
(
res2
,
i2
,
i_rcname
);
char
*
expr
=
PQgetvalue
(
res2
,
i2
,
i_rcsrc
);
query
[
0
]
=
0
;
if
(
name
[
0
]
!=
'$'
)
sprintf
(
query
,
"CONSTRAINT %s "
,
name
);
sprintf
(
query
,
"%sCHECK %s"
,
query
,
expr
);
tblinfo
[
i
].
check_expr
[
i2
]
=
strdup
(
query
);
}
PQclear
(
res2
);
}
else
tblinfo
[
i
].
check_expr
=
NULL
;
/* Get Triggers */
if
(
tblinfo
[
i
].
ntrig
>
0
)
{
PGresult
*
res2
;
int
i_tgname
,
i_tgfoid
,
i_tgtype
,
i_tgnargs
,
i_tgargs
;
int
ntups2
;
int
i2
;
if
(
g_verbose
)
fprintf
(
stderr
,
"%s finding Triggers for relation: %s %s
\n
"
,
g_comment_start
,
tblinfo
[
i
].
relname
,
g_comment_end
);
sprintf
(
query
,
"SELECT tgname, tgfoid, tgtype, tgnargs, tgargs "
"from pg_trigger "
"where tgrelid = '%s'::oid "
,
tblinfo
[
i
].
oid
);
res2
=
PQexec
(
g_conn
,
query
);
if
(
!
res2
||
PQresultStatus
(
res2
)
!=
PGRES_TUPLES_OK
)
{
fprintf
(
stderr
,
"getTables(): SELECT (for TRIGGER) failed
\n
"
);
exit_nicely
(
g_conn
);
}
ntups2
=
PQntuples
(
res2
);
if
(
ntups2
!=
tblinfo
[
i
].
ntrig
)
{
fprintf
(
stderr
,
"getTables(): relation %s: %d Triggers were expected, but got %d
\n
"
,
tblinfo
[
i
].
relname
,
tblinfo
[
i
].
ntrig
,
ntups2
);
exit_nicely
(
g_conn
);
}
i_tgname
=
PQfnumber
(
res2
,
"tgname"
);
i_tgfoid
=
PQfnumber
(
res2
,
"tgfoid"
);
i_tgtype
=
PQfnumber
(
res2
,
"tgtype"
);
i_tgnargs
=
PQfnumber
(
res2
,
"tgnargs"
);
i_tgargs
=
PQfnumber
(
res2
,
"tgargs"
);
tblinfo
[
i
].
triggers
=
(
char
**
)
malloc
(
ntups2
*
sizeof
(
char
*
));
for
(
i2
=
0
,
query
[
0
]
=
0
;
i2
<
ntups2
;
i2
++
)
{
char
*
tgfunc
=
PQgetvalue
(
res2
,
i2
,
i_tgfoid
);
int2
tgtype
=
atoi
(
PQgetvalue
(
res2
,
i2
,
i_tgtype
));
int
tgnargs
=
atoi
(
PQgetvalue
(
res2
,
i2
,
i_tgnargs
));
char
*
tgargs
=
PQgetvalue
(
res2
,
i2
,
i_tgargs
);
char
*
p
;
char
farg
[
MAXQUERYLEN
];
int
findx
;
for
(
findx
=
0
;
findx
<
numFuncs
;
findx
++
)
{
if
(
strcmp
(
finfo
[
findx
].
oid
,
tgfunc
)
==
0
&&
finfo
[
findx
].
lang
==
ClanguageId
&&
finfo
[
findx
].
nargs
==
0
&&
strcmp
(
finfo
[
findx
].
prorettype
,
"0"
)
==
0
)
break
;
}
if
(
findx
==
numFuncs
)
{
fprintf
(
stderr
,
"getTables(): relation %s: cannot find function with oid %s for trigger %s
\n
"
,
tblinfo
[
i
].
relname
,
tgfunc
,
PQgetvalue
(
res2
,
i2
,
i_tgname
));
exit_nicely
(
g_conn
);
}
tgfunc
=
finfo
[
findx
].
proname
;
sprintf
(
query
,
"CREATE TRIGGER %s "
,
PQgetvalue
(
res2
,
i2
,
i_tgname
));
/* Trigger type */
findx
=
0
;
if
(
TRIGGER_FOR_BEFORE
(
tgtype
))
strcat
(
query
,
"BEFORE"
);
else
strcat
(
query
,
"AFTER"
);
if
(
TRIGGER_FOR_INSERT
(
tgtype
))
{
strcat
(
query
,
" INSERT"
);
findx
++
;
}
if
(
TRIGGER_FOR_DELETE
(
tgtype
))
{
if
(
findx
>
0
)
strcat
(
query
,
" OR DELETE"
);
else
strcat
(
query
,
" DELETE"
);
findx
++
;
}
if
(
TRIGGER_FOR_UPDATE
(
tgtype
))
if
(
findx
>
0
)
strcat
(
query
,
" OR UPDATE"
);
else
strcat
(
query
,
" UPDATE"
);
sprintf
(
query
,
"%s ON %s FOR EACH ROW EXECUTE PROCEDURE %s ("
,
query
,
tblinfo
[
i
].
relname
,
tgfunc
);
for
(
findx
=
0
;
findx
<
tgnargs
;
findx
++
)
{
char
*
s
,
*
d
;
for
(
p
=
tgargs
;
;
)
{
p
=
strchr
(
p
,
'\\'
);
if
(
p
==
NULL
)
{
fprintf
(
stderr
,
"getTables(): relation %s: bad argument string (%s) for trigger %s
\n
"
,
tblinfo
[
i
].
relname
,
PQgetvalue
(
res2
,
i2
,
i_tgargs
),
PQgetvalue
(
res2
,
i2
,
i_tgname
));
exit_nicely
(
g_conn
);
}
p
++
;
if
(
*
p
==
'\\'
)
{
p
++
;
continue
;
}
if
(
p
[
0
]
==
'0'
&&
p
[
1
]
==
'0'
&&
p
[
2
]
==
'0'
)
break
;
}
p
--
;
for
(
s
=
tgargs
,
d
=
&
(
farg
[
0
]);
s
<
p
;
)
{
if
(
*
s
==
'\''
)
*
d
++
=
'\\'
;
*
d
++
=
*
s
++
;
}
*
d
=
0
;
sprintf
(
query
,
"%s'%s'%s"
,
query
,
farg
,
(
findx
<
tgnargs
-
1
)
?
", "
:
""
);
tgargs
=
p
+
4
;
}
strcat
(
query
,
");
\n
"
);
tblinfo
[
i
].
triggers
[
i2
]
=
strdup
(
query
);
}
PQclear
(
res2
);
}
else
tblinfo
[
i
].
triggers
=
NULL
;
}
PQclear
(
res
);
...
...
@@ -1426,6 +1629,7 @@ getTableAttrs(TableInfo *tblinfo, int numTables)
int
i_typname
;
int
i_attlen
;
int
i_attnotnull
;
int
i_atthasdef
;
PGresult
*
res
;
int
ntups
;
...
...
@@ -1452,7 +1656,8 @@ getTableAttrs(TableInfo *tblinfo, int numTables)
tblinfo
[
i
].
relname
,
g_comment_end
);
sprintf
(
q
,
"SELECT a.attnum, a.attname, t.typname, a.attlen, a.attnotnull "
sprintf
(
q
,
"SELECT a.attnum, a.attname, t.typname, a.attlen, "
"a.attnotnull, a.atthasdef "
"from pg_attribute a, pg_type t "
"where a.attrelid = '%s'::oid and a.atttypid = t.oid "
"and a.attnum > 0 order by attnum"
,
...
...
@@ -1471,6 +1676,7 @@ getTableAttrs(TableInfo *tblinfo, int numTables)
i_typname
=
PQfnumber
(
res
,
"typname"
);
i_attlen
=
PQfnumber
(
res
,
"attlen"
);
i_attnotnull
=
PQfnumber
(
res
,
"attnotnull"
);
i_atthasdef
=
PQfnumber
(
res
,
"atthasdef"
);
tblinfo
[
i
].
numatts
=
ntups
;
tblinfo
[
i
].
attnames
=
(
char
**
)
malloc
(
ntups
*
sizeof
(
char
*
));
...
...
@@ -1478,6 +1684,7 @@ getTableAttrs(TableInfo *tblinfo, int numTables)
tblinfo
[
i
].
attlen
=
(
int
*
)
malloc
(
ntups
*
sizeof
(
int
));
tblinfo
[
i
].
inhAttrs
=
(
int
*
)
malloc
(
ntups
*
sizeof
(
int
));
tblinfo
[
i
].
notnull
=
(
bool
*
)
malloc
(
ntups
*
sizeof
(
bool
));
tblinfo
[
i
].
adef_expr
=
(
char
**
)
malloc
(
ntups
*
sizeof
(
char
*
));
tblinfo
[
i
].
parentRels
=
NULL
;
tblinfo
[
i
].
numParents
=
0
;
for
(
j
=
0
;
j
<
ntups
;
j
++
)
...
...
@@ -1490,6 +1697,31 @@ getTableAttrs(TableInfo *tblinfo, int numTables)
tblinfo
[
i
].
inhAttrs
[
j
]
=
0
;
/* this flag is set in
* flagInhAttrs() */
tblinfo
[
i
].
notnull
[
j
]
=
(
PQgetvalue
(
res
,
j
,
i_attnotnull
)[
0
]
==
't'
)
?
true
:
false
;
if
(
PQgetvalue
(
res
,
j
,
i_atthasdef
)[
0
]
==
't'
)
{
PGresult
*
res2
;
if
(
g_verbose
)
fprintf
(
stderr
,
"%s finding DEFAULT expression for attr: %s %s
\n
"
,
g_comment_start
,
tblinfo
[
i
].
attnames
[
j
],
g_comment_end
);
sprintf
(
q
,
"SELECT adsrc from pg_attrdef "
"where adrelid = '%s'::oid and adnum = %d "
,
tblinfo
[
i
].
oid
,
j
+
1
);
res2
=
PQexec
(
g_conn
,
q
);
if
(
!
res2
||
PQresultStatus
(
res2
)
!=
PGRES_TUPLES_OK
)
{
fprintf
(
stderr
,
"getTableAttrs(): SELECT (for DEFAULT) failed
\n
"
);
exit_nicely
(
g_conn
);
}
tblinfo
[
i
].
adef_expr
[
j
]
=
strdup
(
PQgetvalue
(
res2
,
0
,
PQfnumber
(
res2
,
"adsrc"
)));
PQclear
(
res2
);
}
else
tblinfo
[
i
].
adef_expr
[
j
]
=
NULL
;
}
PQclear
(
res
);
}
...
...
@@ -1849,6 +2081,7 @@ dumpAggs(FILE *fout, AggInfo *agginfo, int numAggs,
char
q
[
MAXQUERYLEN
];
char
sfunc1
[
MAXQUERYLEN
];
char
sfunc2
[
MAXQUERYLEN
];
char
basetype
[
MAXQUERYLEN
];
char
finalfunc
[
MAXQUERYLEN
];
char
comma1
[
2
],
comma2
[
2
];
...
...
@@ -1859,17 +2092,20 @@ dumpAggs(FILE *fout, AggInfo *agginfo, int numAggs,
if
(
atoi
(
agginfo
[
i
].
oid
)
<
g_last_builtin_oid
)
continue
;
sprintf
(
basetype
,
"BASETYPE = %s, "
,
findTypeByOid
(
tinfo
,
numTypes
,
agginfo
[
i
].
aggbasetype
));
if
(
strcmp
(
agginfo
[
i
].
aggtransfn1
,
"-"
)
==
0
)
sfunc1
[
0
]
=
'\0'
;
else
{
sprintf
(
sfunc1
,
"SFUNC1 = %s,
BASETYPE = %s,
STYPE1 = %s"
,
"SFUNC1 = %s, STYPE1 = %s"
,
agginfo
[
i
].
aggtransfn1
,
findTypeByOid
(
tinfo
,
numTypes
,
agginfo
[
i
].
aggbasetype
),
findTypeByOid
(
tinfo
,
numTypes
,
agginfo
[
i
].
aggtranstype1
));
if
(
agginfo
[
i
].
agginitval1
)
sprintf
(
sfunc1
,
"%s
,
INITCOND1 = '%s'"
,
sprintf
(
sfunc1
,
"%s
,
INITCOND1 = '%s'"
,
sfunc1
,
agginfo
[
i
].
agginitval1
);
}
...
...
@@ -1883,7 +2119,7 @@ dumpAggs(FILE *fout, AggInfo *agginfo, int numAggs,
agginfo
[
i
].
aggtransfn2
,
findTypeByOid
(
tinfo
,
numTypes
,
agginfo
[
i
].
aggtranstype2
));
if
(
agginfo
[
i
].
agginitval2
)
sprintf
(
sfunc2
,
"%s
,
INITCOND2 = '%s'"
,
sprintf
(
sfunc2
,
"%s
,
INITCOND2 = '%s'"
,
sfunc2
,
agginfo
[
i
].
agginitval2
);
}
...
...
@@ -1911,8 +2147,9 @@ dumpAggs(FILE *fout, AggInfo *agginfo, int numAggs,
fprintf
(
fout
,
"
\\
connect - %s
\n
"
,
agginfo
[
i
].
usename
);
sprintf
(
q
,
"CREATE AGGREGATE %s ( %s %s
%s
%s %s );
\n
"
,
sprintf
(
q
,
"CREATE AGGREGATE %s ( %s %s
%s %s
%s %s );
\n
"
,
agginfo
[
i
].
aggname
,
basetype
,
sfunc1
,
comma1
,
sfunc2
,
...
...
@@ -1943,8 +2180,22 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
int
actual_atts
;
/* number of attrs in this CREATE statment */
const
char
*
archiveMode
;
/* First - dump SEQUENCEs */
for
(
i
=
0
;
i
<
numTables
;
i
++
)
{
if
(
!
(
tblinfo
[
i
].
sequence
))
continue
;
if
(
!
tablename
||
(
!
strcmp
(
tblinfo
[
i
].
relname
,
tablename
)))
{
fprintf
(
fout
,
"
\\
connect - %s
\n
"
,
tblinfo
[
i
].
usename
);
dumpSequence
(
fout
,
tblinfo
[
i
]);
}
}
for
(
i
=
0
;
i
<
numTables
;
i
++
)
{
if
(
tblinfo
[
i
].
sequence
)
/* already dumped */
continue
;
if
(
!
tablename
||
(
!
strcmp
(
tblinfo
[
i
].
relname
,
tablename
)))
{
...
...
@@ -1957,12 +2208,6 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
if
(
isArchiveName
(
tblinfo
[
i
].
relname
))
continue
;
if
(
tblinfo
[
i
].
sequence
)
{
dumpSequence
(
fout
,
tblinfo
[
i
]);
continue
;
}
parentRels
=
tblinfo
[
i
].
parentRels
;
numParents
=
tblinfo
[
i
].
numParents
;
...
...
@@ -2014,6 +2259,8 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
tblinfo
[
i
].
typnames
[
j
]);
actual_atts
++
;
}
if
(
tblinfo
[
i
].
adef_expr
[
j
]
!=
NULL
)
sprintf
(
q
,
"%s DEFAULT %s"
,
q
,
tblinfo
[
i
].
adef_expr
[
j
]);
if
(
tblinfo
[
i
].
notnull
[
j
])
sprintf
(
q
,
"%s NOT NULL"
,
q
);
}
...
...
@@ -2034,6 +2281,17 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
strcat
(
q
,
")"
);
}
if
(
tblinfo
[
i
].
ncheck
>
0
)
{
for
(
k
=
0
;
k
<
tblinfo
[
i
].
ncheck
;
k
++
)
{
sprintf
(
q
,
"%s%s %s"
,
q
,
(
k
>
0
)
?
", "
:
""
,
tblinfo
[
i
].
check_expr
[
k
]);
}
}
switch
(
tblinfo
[
i
].
relarch
[
0
])
{
case
'n'
:
...
...
@@ -2460,3 +2718,27 @@ dumpSequence(FILE *fout, TableInfo tbinfo)
fputs
(
query
,
fout
);
}
static
void
dumpTriggers
(
FILE
*
fout
,
const
char
*
tablename
,
TableInfo
*
tblinfo
,
int
numTables
)
{
int
i
,
j
;
if
(
g_verbose
)
fprintf
(
stderr
,
"%s dumping out triggers %s
\n
"
,
g_comment_start
,
g_comment_end
);
for
(
i
=
0
;
i
<
numTables
;
i
++
)
{
if
(
tablename
&&
strcmp
(
tblinfo
[
i
].
relname
,
tablename
))
continue
;
for
(
j
=
0
;
j
<
tblinfo
[
i
].
ntrig
;
j
++
)
{
fprintf
(
fout
,
"
\\
connect - %s
\n
"
,
tblinfo
[
i
].
usename
);
fputs
(
tblinfo
[
i
].
triggers
[
j
],
fout
);
}
}
}
src/bin/pg_dump/pg_dump.h
View file @
abb0e707
...
...
@@ -5,7 +5,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: pg_dump.h,v 1.2
4 1997/09/24 15:36:36 momjian
Exp $
* $Id: pg_dump.h,v 1.2
5 1997/10/02 13:57:07 vadim
Exp $
*
* Modifications - 6/12/96 - dave@bensoft.com - version 1.13.dhb.2
*
...
...
@@ -76,6 +76,7 @@ typedef struct _tableInfo
char
**
attnames
;
/* the attribute names */
char
**
typnames
;
/* fill out attributes */
bool
*
notnull
;
/* Not null constraints of an attribute */
char
**
adef_expr
;
/* DEFAULT expressions */
int
numParents
;
/* number of (immediate) parent
* supertables */
char
**
parentRels
;
/* names of parent relations, NULL if
...
...
@@ -88,7 +89,10 @@ typedef struct _tableInfo
* the POSTQUEL tables */
int
*
attlen
;
/* attribute lengths */
char
*
usename
;
int
ncheck
;
/* # of CHECK expressions */
char
**
check_expr
;
/* [CONSTRAINT name] CHECK expressions */
int
ntrig
;
/* # of triggers */
char
**
triggers
;
/* CREATE TRIGGER ... */
}
TableInfo
;
typedef
struct
_inhInfo
...
...
@@ -176,7 +180,6 @@ dumpSchema(FILE *fout,
const
bool
acls
);
extern
void
dumpSchemaIdx
(
FILE
*
fout
,
int
*
numTablesPtr
,
const
char
*
tablename
,
TableInfo
*
tblinfo
,
int
numTables
);
...
...
@@ -205,7 +208,7 @@ extern void clearOprInfo(OprInfo *, int);
extern
void
clearTypeInfo
(
TypeInfo
*
,
int
);
extern
OprInfo
*
getOperators
(
int
*
numOperators
);
extern
TableInfo
*
getTables
(
int
*
numTables
);
extern
TableInfo
*
getTables
(
int
*
numTables
,
FuncInfo
*
finfo
,
int
numFuncs
);
extern
InhInfo
*
getInherits
(
int
*
numInherits
);
extern
void
getTableAttrs
(
TableInfo
*
tbinfo
,
int
numTables
);
extern
IndInfo
*
getIndices
(
int
*
numIndices
);
...
...
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