@ -2012,6 +2012,13 @@ selectDumpableProcLang(ProcLangInfo *plang, Archive *fout)
static void
static void
selectDumpableAccessMethod ( AccessMethodInfo * method , Archive * fout )
selectDumpableAccessMethod ( AccessMethodInfo * method , Archive * fout )
{
{
/* see getAccessMethods() comment about v9.6. */
if ( fout - > remoteVersion < 90600 )
{
method - > dobj . dump = DUMP_COMPONENT_NONE ;
return ;
}
if ( checkExtensionMembership ( & method - > dobj , fout ) )
if ( checkExtensionMembership ( & method - > dobj , fout ) )
return ; /* extension membership overrides all else */
return ; /* extension membership overrides all else */
@ -5997,6 +6004,8 @@ getOperators(Archive *fout, int *numOprs)
int i_oprnamespace ;
int i_oprnamespace ;
int i_oprowner ;
int i_oprowner ;
int i_oprkind ;
int i_oprkind ;
int i_oprleft ;
int i_oprright ;
int i_oprcode ;
int i_oprcode ;
/*
/*
@ -6008,6 +6017,8 @@ getOperators(Archive *fout, int *numOprs)
" oprnamespace, "
" oprnamespace, "
" oprowner, "
" oprowner, "
" oprkind, "
" oprkind, "
" oprleft, "
" oprright, "
" oprcode::oid AS oprcode "
" oprcode::oid AS oprcode "
" FROM pg_operator " ) ;
" FROM pg_operator " ) ;
@ -6024,6 +6035,8 @@ getOperators(Archive *fout, int *numOprs)
i_oprnamespace = PQfnumber ( res , " oprnamespace " ) ;
i_oprnamespace = PQfnumber ( res , " oprnamespace " ) ;
i_oprowner = PQfnumber ( res , " oprowner " ) ;
i_oprowner = PQfnumber ( res , " oprowner " ) ;
i_oprkind = PQfnumber ( res , " oprkind " ) ;
i_oprkind = PQfnumber ( res , " oprkind " ) ;
i_oprleft = PQfnumber ( res , " oprleft " ) ;
i_oprright = PQfnumber ( res , " oprright " ) ;
i_oprcode = PQfnumber ( res , " oprcode " ) ;
i_oprcode = PQfnumber ( res , " oprcode " ) ;
for ( i = 0 ; i < ntups ; i + + )
for ( i = 0 ; i < ntups ; i + + )
@ -6037,6 +6050,8 @@ getOperators(Archive *fout, int *numOprs)
findNamespace ( atooid ( PQgetvalue ( res , i , i_oprnamespace ) ) ) ;
findNamespace ( atooid ( PQgetvalue ( res , i , i_oprnamespace ) ) ) ;
oprinfo [ i ] . rolname = getRoleName ( PQgetvalue ( res , i , i_oprowner ) ) ;
oprinfo [ i ] . rolname = getRoleName ( PQgetvalue ( res , i , i_oprowner ) ) ;
oprinfo [ i ] . oprkind = ( PQgetvalue ( res , i , i_oprkind ) ) [ 0 ] ;
oprinfo [ i ] . oprkind = ( PQgetvalue ( res , i , i_oprkind ) ) [ 0 ] ;
oprinfo [ i ] . oprleft = atooid ( PQgetvalue ( res , i , i_oprleft ) ) ;
oprinfo [ i ] . oprright = atooid ( PQgetvalue ( res , i , i_oprright ) ) ;
oprinfo [ i ] . oprcode = atooid ( PQgetvalue ( res , i , i_oprcode ) ) ;
oprinfo [ i ] . oprcode = atooid ( PQgetvalue ( res , i , i_oprcode ) ) ;
/* Decide whether we want to dump it */
/* Decide whether we want to dump it */
@ -6070,6 +6085,7 @@ getCollations(Archive *fout, int *numCollations)
int i_collname ;
int i_collname ;
int i_collnamespace ;
int i_collnamespace ;
int i_collowner ;
int i_collowner ;
int i_collencoding ;
query = createPQExpBuffer ( ) ;
query = createPQExpBuffer ( ) ;
@ -6080,7 +6096,8 @@ getCollations(Archive *fout, int *numCollations)
appendPQExpBufferStr ( query , " SELECT tableoid, oid, collname, "
appendPQExpBufferStr ( query , " SELECT tableoid, oid, collname, "
" collnamespace, "
" collnamespace, "
" collowner "
" collowner, "
" collencoding "
" FROM pg_collation " ) ;
" FROM pg_collation " ) ;
res = ExecuteSqlQuery ( fout , query - > data , PGRES_TUPLES_OK ) ;
res = ExecuteSqlQuery ( fout , query - > data , PGRES_TUPLES_OK ) ;
@ -6095,6 +6112,7 @@ getCollations(Archive *fout, int *numCollations)
i_collname = PQfnumber ( res , " collname " ) ;
i_collname = PQfnumber ( res , " collname " ) ;
i_collnamespace = PQfnumber ( res , " collnamespace " ) ;
i_collnamespace = PQfnumber ( res , " collnamespace " ) ;
i_collowner = PQfnumber ( res , " collowner " ) ;
i_collowner = PQfnumber ( res , " collowner " ) ;
i_collencoding = PQfnumber ( res , " collencoding " ) ;
for ( i = 0 ; i < ntups ; i + + )
for ( i = 0 ; i < ntups ; i + + )
{
{
@ -6106,6 +6124,7 @@ getCollations(Archive *fout, int *numCollations)
collinfo [ i ] . dobj . namespace =
collinfo [ i ] . dobj . namespace =
findNamespace ( atooid ( PQgetvalue ( res , i , i_collnamespace ) ) ) ;
findNamespace ( atooid ( PQgetvalue ( res , i , i_collnamespace ) ) ) ;
collinfo [ i ] . rolname = getRoleName ( PQgetvalue ( res , i , i_collowner ) ) ;
collinfo [ i ] . rolname = getRoleName ( PQgetvalue ( res , i , i_collowner ) ) ;
collinfo [ i ] . collencoding = atoi ( PQgetvalue ( res , i , i_collencoding ) ) ;
/* Decide whether we want to dump it */
/* Decide whether we want to dump it */
selectDumpableObject ( & ( collinfo [ i ] . dobj ) , fout ) ;
selectDumpableObject ( & ( collinfo [ i ] . dobj ) , fout ) ;
@ -6207,19 +6226,28 @@ getAccessMethods(Archive *fout, int *numAccessMethods)
int i_amhandler ;
int i_amhandler ;
int i_amtype ;
int i_amtype ;
/* Before 9.6, there are no user-defined access methods */
if ( fout - > remoteVersion < 90600 )
{
* numAccessMethods = 0 ;
return NULL ;
}
query = createPQExpBuffer ( ) ;
query = createPQExpBuffer ( ) ;
/* Select all access methods from pg_am table */
/*
appendPQExpBufferStr ( query , " SELECT tableoid, oid, amname, amtype, "
* Select all access methods from pg_am table . v9 .6 introduced CREATE
" amhandler::pg_catalog.regproc AS amhandler "
* ACCESS METHOD , so earlier versions usually have only built - in access
" FROM pg_am " ) ;
* methods . v9 .6 also changed the access method API , replacing dozens of
* pg_am columns with amhandler . Even if a user created an access method
* by " INSERT INTO pg_am " , we have no way to translate pre - v9 .6 pg_am
* columns to a v9 .6 + CREATE ACCESS METHOD . Hence , before v9 .6 , read
* pg_am just to facilitate findAccessMethodByOid ( ) providing the
* OID - to - name mapping .
*/
appendPQExpBufferStr ( query , " SELECT tableoid, oid, amname, " ) ;
if ( fout - > remoteVersion > = 90600 )
appendPQExpBufferStr ( query ,
" amtype, "
" amhandler::pg_catalog.regproc AS amhandler " ) ;
else
appendPQExpBufferStr ( query ,
" 'i'::pg_catalog. \" char \" AS amtype, "
" '-'::pg_catalog.regproc AS amhandler " ) ;
appendPQExpBufferStr ( query , " FROM pg_am " ) ;
res = ExecuteSqlQuery ( fout , query - > data , PGRES_TUPLES_OK ) ;
res = ExecuteSqlQuery ( fout , query - > data , PGRES_TUPLES_OK ) ;
@ -6274,6 +6302,7 @@ getOpclasses(Archive *fout, int *numOpclasses)
OpclassInfo * opcinfo ;
OpclassInfo * opcinfo ;
int i_tableoid ;
int i_tableoid ;
int i_oid ;
int i_oid ;
int i_opcmethod ;
int i_opcname ;
int i_opcname ;
int i_opcnamespace ;
int i_opcnamespace ;
int i_opcowner ;
int i_opcowner ;
@ -6283,7 +6312,7 @@ getOpclasses(Archive *fout, int *numOpclasses)
* system - defined opclasses at dump - out time .
* system - defined opclasses at dump - out time .
*/
*/
appendPQExpBufferStr ( query , " SELECT tableoid, oid, opcname, "
appendPQExpBufferStr ( query , " SELECT tableoid, oid, opcmethod, opc name, "
" opcnamespace, "
" opcnamespace, "
" opcowner "
" opcowner "
" FROM pg_opclass " ) ;
" FROM pg_opclass " ) ;
@ -6297,6 +6326,7 @@ getOpclasses(Archive *fout, int *numOpclasses)
i_tableoid = PQfnumber ( res , " tableoid " ) ;
i_tableoid = PQfnumber ( res , " tableoid " ) ;
i_oid = PQfnumber ( res , " oid " ) ;
i_oid = PQfnumber ( res , " oid " ) ;
i_opcmethod = PQfnumber ( res , " opcmethod " ) ;
i_opcname = PQfnumber ( res , " opcname " ) ;
i_opcname = PQfnumber ( res , " opcname " ) ;
i_opcnamespace = PQfnumber ( res , " opcnamespace " ) ;
i_opcnamespace = PQfnumber ( res , " opcnamespace " ) ;
i_opcowner = PQfnumber ( res , " opcowner " ) ;
i_opcowner = PQfnumber ( res , " opcowner " ) ;
@ -6310,6 +6340,7 @@ getOpclasses(Archive *fout, int *numOpclasses)
opcinfo [ i ] . dobj . name = pg_strdup ( PQgetvalue ( res , i , i_opcname ) ) ;
opcinfo [ i ] . dobj . name = pg_strdup ( PQgetvalue ( res , i , i_opcname ) ) ;
opcinfo [ i ] . dobj . namespace =
opcinfo [ i ] . dobj . namespace =
findNamespace ( atooid ( PQgetvalue ( res , i , i_opcnamespace ) ) ) ;
findNamespace ( atooid ( PQgetvalue ( res , i , i_opcnamespace ) ) ) ;
opcinfo [ i ] . opcmethod = atooid ( PQgetvalue ( res , i , i_opcmethod ) ) ;
opcinfo [ i ] . rolname = getRoleName ( PQgetvalue ( res , i , i_opcowner ) ) ;
opcinfo [ i ] . rolname = getRoleName ( PQgetvalue ( res , i , i_opcowner ) ) ;
/* Decide whether we want to dump it */
/* Decide whether we want to dump it */
@ -6340,6 +6371,7 @@ getOpfamilies(Archive *fout, int *numOpfamilies)
OpfamilyInfo * opfinfo ;
OpfamilyInfo * opfinfo ;
int i_tableoid ;
int i_tableoid ;
int i_oid ;
int i_oid ;
int i_opfmethod ;
int i_opfname ;
int i_opfname ;
int i_opfnamespace ;
int i_opfnamespace ;
int i_opfowner ;
int i_opfowner ;
@ -6351,7 +6383,7 @@ getOpfamilies(Archive *fout, int *numOpfamilies)
* system - defined opfamilies at dump - out time .
* system - defined opfamilies at dump - out time .
*/
*/
appendPQExpBufferStr ( query , " SELECT tableoid, oid, opfname, "
appendPQExpBufferStr ( query , " SELECT tableoid, oid, opfmethod, opf name, "
" opfnamespace, "
" opfnamespace, "
" opfowner "
" opfowner "
" FROM pg_opfamily " ) ;
" FROM pg_opfamily " ) ;
@ -6366,6 +6398,7 @@ getOpfamilies(Archive *fout, int *numOpfamilies)
i_tableoid = PQfnumber ( res , " tableoid " ) ;
i_tableoid = PQfnumber ( res , " tableoid " ) ;
i_oid = PQfnumber ( res , " oid " ) ;
i_oid = PQfnumber ( res , " oid " ) ;
i_opfname = PQfnumber ( res , " opfname " ) ;
i_opfname = PQfnumber ( res , " opfname " ) ;
i_opfmethod = PQfnumber ( res , " opfmethod " ) ;
i_opfnamespace = PQfnumber ( res , " opfnamespace " ) ;
i_opfnamespace = PQfnumber ( res , " opfnamespace " ) ;
i_opfowner = PQfnumber ( res , " opfowner " ) ;
i_opfowner = PQfnumber ( res , " opfowner " ) ;
@ -6378,6 +6411,7 @@ getOpfamilies(Archive *fout, int *numOpfamilies)
opfinfo [ i ] . dobj . name = pg_strdup ( PQgetvalue ( res , i , i_opfname ) ) ;
opfinfo [ i ] . dobj . name = pg_strdup ( PQgetvalue ( res , i , i_opfname ) ) ;
opfinfo [ i ] . dobj . namespace =
opfinfo [ i ] . dobj . namespace =
findNamespace ( atooid ( PQgetvalue ( res , i , i_opfnamespace ) ) ) ;
findNamespace ( atooid ( PQgetvalue ( res , i , i_opfnamespace ) ) ) ;
opfinfo [ i ] . opfmethod = atooid ( PQgetvalue ( res , i , i_opfmethod ) ) ;
opfinfo [ i ] . rolname = getRoleName ( PQgetvalue ( res , i , i_opfowner ) ) ;
opfinfo [ i ] . rolname = getRoleName ( PQgetvalue ( res , i , i_opfowner ) ) ;
/* Decide whether we want to dump it */
/* Decide whether we want to dump it */