12
12
*by PostgreSQL
13
13
*
14
14
* IDENTIFICATION
15
- * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.540 2009/07/02 21:34:32 tgl Exp $
15
+ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.541 2009/07/20 20:53:40 momjian Exp $
16
16
*
17
17
*-------------------------------------------------------------------------
18
18
*/
34
34
#include "access/sysattr.h"
35
35
#include "catalog/pg_cast.h"
36
36
#include "catalog/pg_class.h"
37
+ #include "catalog/pg_largeobject.h"
37
38
#include "catalog/pg_proc.h"
38
39
#include "catalog/pg_trigger.h"
39
40
#include "catalog/pg_type.h"
@@ -1739,6 +1740,7 @@ dumpDatabase(Archive *AH)
1739
1740
frozenxid );
1740
1741
appendStringLiteralAH (creaQry ,datname ,AH );
1741
1742
appendPQExpBuffer (creaQry ,";\n" );
1743
+
1742
1744
}
1743
1745
1744
1746
appendPQExpBuffer (delQry ,"DROP DATABASE %s;\n" ,
@@ -1764,6 +1766,51 @@ dumpDatabase(Archive *AH)
1764
1766
NULL ,/* Dumper */
1765
1767
NULL );/* Dumper Arg */
1766
1768
1769
+ /*
1770
+ *pg_largeobject comes from the old system intact, so set
1771
+ *its relfrozenxid.
1772
+ */
1773
+ if (binary_upgrade )
1774
+ {
1775
+ PGresult * lo_res ;
1776
+ PQExpBuffer loFrozenQry = createPQExpBuffer ();
1777
+ PQExpBuffer loOutQry = createPQExpBuffer ();
1778
+ int i_relfrozenxid ;
1779
+
1780
+ appendPQExpBuffer (loFrozenQry ,"SELECT relfrozenxid\n"
1781
+ "FROM pg_catalog.pg_class\n"
1782
+ "WHERE oid = %d;\n" ,
1783
+ LargeObjectRelationId );
1784
+
1785
+ lo_res = PQexec (g_conn ,loFrozenQry -> data );
1786
+ check_sql_result (lo_res ,g_conn ,loFrozenQry -> data ,PGRES_TUPLES_OK );
1787
+
1788
+ if (PQntuples (lo_res )!= 1 )
1789
+ {
1790
+ write_msg (NULL ,"dumpDatabase(): could not find pg_largeobject.relfrozenxid\n" );
1791
+ exit_nicely ();
1792
+ }
1793
+
1794
+ i_relfrozenxid = PQfnumber (lo_res ,"relfrozenxid" );
1795
+
1796
+ appendPQExpBuffer (loOutQry ,"\n-- For binary upgrade, set pg_largeobject relfrozenxid.\n" );
1797
+ appendPQExpBuffer (loOutQry ,"UPDATE pg_catalog.pg_class\n"
1798
+ "SET relfrozenxid = '%u'\n"
1799
+ "WHERE oid = %d;\n" ,
1800
+ atoi (PQgetvalue (lo_res ,0 ,i_relfrozenxid )),
1801
+ LargeObjectRelationId );
1802
+ ArchiveEntry (AH ,nilCatalogId ,createDumpId (),
1803
+ "pg_largeobject" ,NULL ,NULL ,"" ,
1804
+ false,"pg_largeobject" ,SECTION_PRE_DATA ,
1805
+ loOutQry -> data ,"" ,NULL ,
1806
+ NULL ,0 ,
1807
+ NULL ,NULL );
1808
+
1809
+ PQclear (lo_res );
1810
+ destroyPQExpBuffer (loFrozenQry );
1811
+ destroyPQExpBuffer (loOutQry );
1812
+ }
1813
+
1767
1814
/* Dump DB comment if any */
1768
1815
if (g_fout -> remoteVersion >=80200 )
1769
1816
{