22
22
*
23
23
*
24
24
* IDENTIFICATION
25
- * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.201 2001/04/05 02:50:01 tgl Exp $
25
+ * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.202 2001/04/14 13:11:03 pjw Exp $
26
26
*
27
27
* Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb
28
28
*
@@ -2035,9 +2035,14 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
2035
2035
PGresult * res2 ;
2036
2036
2037
2037
resetPQExpBuffer (query );
2038
- appendPQExpBuffer (query , "SELECT pg_get_viewdef(" );
2038
+ appendPQExpBuffer (query , "SELECT definition as viewdef, " );
2039
+ /* XXX 7.2 - replace with att from pg_views or some other generic source */
2040
+ appendPQExpBuffer (query , "(select oid from pg_rewrite where rulename='_RET'"
2041
+ " || viewname) as view_oid from pg_views"
2042
+ " where viewname = " );
2039
2043
formatStringLiteral (query , tblinfo [i ].relname , CONV_ALL );
2040
- appendPQExpBuffer (query , ") as viewdef" );
2044
+ appendPQExpBuffer (query , ";" );
2045
+
2041
2046
res2 = PQexec (g_conn , query -> data );
2042
2047
if (!res2 || PQresultStatus (res2 ) != PGRES_TUPLES_OK )
2043
2048
{
@@ -2051,18 +2056,26 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
2051
2056
{
2052
2057
if (PQntuples (res2 ) < 1 )
2053
2058
{
2054
- fprintf (stderr , "getTables(): SELECT (for VIEW %s) returned no definitions" ,
2059
+ fprintf (stderr , "getTables(): SELECT (for VIEW %s) returned no definitions\n " ,
2055
2060
tblinfo [i ].relname );
2056
2061
}
2057
2062
else
2058
2063
{
2059
- fprintf (stderr , "getTables(): SELECT (for VIEW %s) returned more than 1 definition" ,
2064
+ fprintf (stderr , "getTables(): SELECT (for VIEW %s) returned more than 1 definition\n " ,
2060
2065
tblinfo [i ].relname );
2061
2066
}
2062
2067
exit_nicely (g_conn );
2063
2068
}
2064
2069
2070
+ if (PQgetisnull (res2 , 0 , 1 ))
2071
+ {
2072
+ fprintf (stderr , "getTables(): SELECT (for VIEW %s) returned NULL oid\n" , tblinfo [i ].relname );
2073
+ fprintf (stderr , "SELECT was: %s\n" , query -> data );
2074
+ exit_nicely (g_conn );
2075
+ }
2076
+
2065
2077
tblinfo [i ].viewdef = strdup (PQgetvalue (res2 , 0 , 0 ));
2078
+ tblinfo [i ].viewoid = strdup (PQgetvalue (res2 , 0 , 1 ));
2066
2079
2067
2080
if (strlen (tblinfo [i ].viewdef ) == 0 )
2068
2081
{
@@ -3739,6 +3752,7 @@ dumpTables(Archive *fout, TableInfo *tblinfo, int numTables,
3739
3752
int numParents ;
3740
3753
int actual_atts ; /* number of attrs in this CREATE statment */
3741
3754
char * reltypename ;
3755
+ char * objoid ;
3742
3756
3743
3757
/* First - dump SEQUENCEs */
3744
3758
if (tablename && strlen (tablename ) > 0 )
@@ -3778,15 +3792,15 @@ dumpTables(Archive *fout, TableInfo *tblinfo, int numTables,
3778
3792
if (tblinfo [i ].viewdef != NULL )
3779
3793
{
3780
3794
reltypename = "VIEW" ;
3781
-
3795
+ objoid = tblinfo [ i ]. viewoid ;
3782
3796
appendPQExpBuffer (delq , "DROP VIEW %s;\n" , fmtId (tblinfo [i ].relname , force_quotes ));
3783
- appendPQExpBuffer (q , "CREATE VIEW %s as %s" , fmtId (tblinfo [i ].relname , force_quotes ), tblinfo [i ].viewdef );
3797
+ appendPQExpBuffer (q , "CREATE VIEW %s as %s\n " , fmtId (tblinfo [i ].relname , force_quotes ), tblinfo [i ].viewdef );
3784
3798
3785
3799
}
3786
3800
else
3787
3801
{
3788
3802
reltypename = "TABLE" ;
3789
-
3803
+ objoid = tblinfo [ i ]. oid ;
3790
3804
parentRels = tblinfo [i ].parentRels ;
3791
3805
numParents = tblinfo [i ].numParents ;
3792
3806
@@ -3883,7 +3897,7 @@ dumpTables(Archive *fout, TableInfo *tblinfo, int numTables,
3883
3897
if (!dataOnly )
3884
3898
{
3885
3899
3886
- ArchiveEntry (fout , tblinfo [ i ]. oid , tblinfo [i ].relname ,
3900
+ ArchiveEntry (fout , objoid , tblinfo [i ].relname ,
3887
3901
reltypename , NULL , q -> data , delq -> data , "" , tblinfo [i ].usename ,
3888
3902
NULL , NULL );
3889
3903
@@ -4323,7 +4337,7 @@ findLastBuiltinOid(const char *dbname)
4323
4337
if (res == NULL ||
4324
4338
PQresultStatus (res ) != PGRES_TUPLES_OK )
4325
4339
{
4326
- fprintf (stderr , "pg_dump: error in finding the last system OID" );
4340
+ fprintf (stderr , "pg_dump: error in finding the last system OID. " );
4327
4341
fprintf (stderr , "Explanation from backend: '%s'.\n" , PQerrorMessage (g_conn ));
4328
4342
exit_nicely (g_conn );
4329
4343
}
0 commit comments