50
50
#include "catalog/pg_class.h"
51
51
#include "catalog/pg_default_acl.h"
52
52
#include "catalog/pg_largeobject.h"
53
+ #include "catalog/pg_largeobject_metadata.h"
53
54
#include "catalog/pg_proc.h"
54
55
#include "catalog/pg_trigger.h"
55
56
#include "catalog/pg_type.h"
@@ -1920,8 +1921,8 @@ dumpDatabase(Archive *AH)
1920
1921
NULL );/* Dumper Arg */
1921
1922
1922
1923
/*
1923
- * pg_largeobjectcomes from the old system intact, so set its
1924
- *relfrozenxid .
1924
+ * pg_largeobjectand pg_largeobject_metadata come from the old system
1925
+ *intact, so set their relfrozenxids .
1925
1926
*/
1926
1927
if (binary_upgrade )
1927
1928
{
@@ -1930,6 +1931,9 @@ dumpDatabase(Archive *AH)
1930
1931
PQExpBuffer loOutQry = createPQExpBuffer ();
1931
1932
int i_relfrozenxid ;
1932
1933
1934
+ /*
1935
+ *pg_largeobject
1936
+ */
1933
1937
appendPQExpBuffer (loFrozenQry ,"SELECT relfrozenxid\n"
1934
1938
"FROM pg_catalog.pg_class\n"
1935
1939
"WHERE oid = %u;\n" ,
@@ -1946,7 +1950,7 @@ dumpDatabase(Archive *AH)
1946
1950
1947
1951
i_relfrozenxid = PQfnumber (lo_res ,"relfrozenxid" );
1948
1952
1949
- appendPQExpBuffer (loOutQry ,"\n-- For binary upgrade, set pg_largeobject relfrozenxid. \n" );
1953
+ appendPQExpBuffer (loOutQry ,"\n-- For binary upgrade, set pg_largeobject.relfrozenxid \n" );
1950
1954
appendPQExpBuffer (loOutQry ,"UPDATE pg_catalog.pg_class\n"
1951
1955
"SET relfrozenxid = '%u'\n"
1952
1956
"WHERE oid = %u;\n" ,
@@ -1960,6 +1964,47 @@ dumpDatabase(Archive *AH)
1960
1964
NULL ,NULL );
1961
1965
1962
1966
PQclear (lo_res );
1967
+
1968
+ /*
1969
+ *pg_largeobject_metadata
1970
+ */
1971
+ if (g_fout -> remoteVersion >=90000 )
1972
+ {
1973
+ resetPQExpBuffer (loFrozenQry );
1974
+ resetPQExpBuffer (loOutQry );
1975
+
1976
+ appendPQExpBuffer (loFrozenQry ,"SELECT relfrozenxid\n"
1977
+ "FROM pg_catalog.pg_class\n"
1978
+ "WHERE oid = %u;\n" ,
1979
+ LargeObjectMetadataRelationId );
1980
+
1981
+ lo_res = PQexec (g_conn ,loFrozenQry -> data );
1982
+ check_sql_result (lo_res ,g_conn ,loFrozenQry -> data ,PGRES_TUPLES_OK );
1983
+
1984
+ if (PQntuples (lo_res )!= 1 )
1985
+ {
1986
+ write_msg (NULL ,"dumpDatabase(): could not find pg_largeobject_metadata.relfrozenxid\n" );
1987
+ exit_nicely ();
1988
+ }
1989
+
1990
+ i_relfrozenxid = PQfnumber (lo_res ,"relfrozenxid" );
1991
+
1992
+ appendPQExpBuffer (loOutQry ,"\n-- For binary upgrade, set pg_largeobject_metadata.relfrozenxid\n" );
1993
+ appendPQExpBuffer (loOutQry ,"UPDATE pg_catalog.pg_class\n"
1994
+ "SET relfrozenxid = '%u'\n"
1995
+ "WHERE oid = %u;\n" ,
1996
+ atoi (PQgetvalue (lo_res ,0 ,i_relfrozenxid )),
1997
+ LargeObjectMetadataRelationId );
1998
+ ArchiveEntry (AH ,nilCatalogId ,createDumpId (),
1999
+ "pg_largeobject_metadata" ,NULL ,NULL ,"" ,
2000
+ false,"pg_largeobject_metadata" ,SECTION_PRE_DATA ,
2001
+ loOutQry -> data ,"" ,NULL ,
2002
+ NULL ,0 ,
2003
+ NULL ,NULL );
2004
+
2005
+ PQclear (lo_res );
2006
+ }
2007
+
1963
2008
destroyPQExpBuffer (loFrozenQry );
1964
2009
destroyPQExpBuffer (loOutQry );
1965
2010
}
@@ -12176,7 +12221,7 @@ dumpTableSchema(Archive *fout, TableInfo *tbinfo)
12176
12221
}
12177
12222
}
12178
12223
12179
- appendPQExpBuffer (q ,"\n-- For binary upgrade, set relfrozenxid. \n" );
12224
+ appendPQExpBuffer (q ,"\n-- For binary upgrade, set relfrozenxid\n" );
12180
12225
appendPQExpBuffer (q ,"UPDATE pg_catalog.pg_class\n"
12181
12226
"SET relfrozenxid = '%u'\n"
12182
12227
"WHERE oid = " ,