Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitdd2c410

Browse files
committed
Allow pg_dump to preserve owners of all objects.
1 parent0acf9c9 commitdd2c410

File tree

2 files changed

+87
-44
lines changed

2 files changed

+87
-44
lines changed

‎src/bin/pg_dump/pg_dump.c

Lines changed: 57 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
*
2222
*
2323
* IDENTIFICATION
24-
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.32 1997/06/07 05:29:22 momjian Exp $
24+
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.33 1997/06/20 02:20:17 momjian Exp $
2525
*
2626
* Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb
2727
*
@@ -263,7 +263,7 @@ dumpClasses_dumpData(FILE *fout, const char *classname,
263263
inttuple;
264264
intfield;
265265

266-
sprintf(query,"select * from %s;\n",classname);
266+
sprintf(query,"select * from %s",classname);
267267
res=PQexec(g_conn,query);
268268
if (!res||
269269
PQresultStatus(res)!=PGRES_TUPLES_OK) {
@@ -546,6 +546,7 @@ getTypes(int *numTypes)
546546
inti_typdefault;
547547
inti_typrelid;
548548
inti_typbyval;
549+
inti_usename;
549550

550551
res=PQexec(g_conn,"begin");
551552
if (!res||
@@ -561,9 +562,10 @@ getTypes(int *numTypes)
561562
/* we filter out the built-in types when
562563
we dump out the types */
563564

564-
sprintf(query,"SELECT oid, typowner,typname, typlen, typprtlen, "
565+
sprintf(query,"SELECTpg_type.oid, typowner,typname, typlen, typprtlen, "
565566
"typinput, typoutput, typreceive, typsend, typelem, typdelim, "
566-
"typdefault, typrelid,typbyval from pg_type");
567+
"typdefault, typrelid,typbyval, usename from pg_type, pg_user "
568+
"where typowner = usesysid");
567569

568570
res=PQexec(g_conn,query);
569571
if (!res||
@@ -590,6 +592,7 @@ getTypes(int *numTypes)
590592
i_typdefault=PQfnumber(res,"typdefault");
591593
i_typrelid=PQfnumber(res,"typrelid");
592594
i_typbyval=PQfnumber(res,"typbyval");
595+
i_usename=PQfnumber(res,"usename");
593596

594597
for (i=0;i<ntups;i++) {
595598
tinfo[i].oid=strdup(PQgetvalue(res,i,i_oid));
@@ -605,6 +608,7 @@ getTypes(int *numTypes)
605608
tinfo[i].typdelim=strdup(PQgetvalue(res,i,i_typdelim));
606609
tinfo[i].typdefault=strdup(PQgetvalue(res,i,i_typdefault));
607610
tinfo[i].typrelid=strdup(PQgetvalue(res,i,i_typrelid));
611+
tinfo[i].usename=strdup(PQgetvalue(res,i,i_usename));
608612

609613
if (strcmp(PQgetvalue(res,i,i_typbyval),"f")==0)
610614
tinfo[i].passedbyvalue=0;
@@ -662,6 +666,7 @@ getOperators(int *numOprs)
662666
inti_oprcanhash;
663667
inti_oprlsortop;
664668
inti_oprrsortop;
669+
inti_usename;
665670

666671
/* find all operators, including builtin operators,
667672
filter out system-defined operators at dump-out time */
@@ -673,9 +678,11 @@ getOperators(int *numOprs)
673678
}
674679
PQclear(res);
675680

676-
sprintf(query,"SELECT oid, oprname, oprkind, oprcode, oprleft, "
677-
"oprright, oprcom, oprnegate, oprrest, oprjoin, oprcanhash, "
678-
"oprlsortop, oprrsortop from pg_operator");
681+
sprintf(query,"SELECT pg_operator.oid, oprname, oprkind, oprcode, "
682+
"oprleft, oprright, oprcom, oprnegate, oprrest, oprjoin, "
683+
"oprcanhash, oprlsortop, oprrsortop, usename "
684+
"from pg_operator, pg_user "
685+
"where oprowner = usesysid");
679686

680687
res=PQexec(g_conn,query);
681688
if (!res||
@@ -702,6 +709,7 @@ getOperators(int *numOprs)
702709
i_oprcanhash=PQfnumber(res,"oprcanhash");
703710
i_oprlsortop=PQfnumber(res,"oprlsortop");
704711
i_oprrsortop=PQfnumber(res,"oprrsortop");
712+
i_usename=PQfnumber(res,"usename");
705713

706714
for (i=0;i<ntups;i++) {
707715
oprinfo[i].oid=strdup(PQgetvalue(res,i,i_oid));
@@ -717,6 +725,7 @@ getOperators(int *numOprs)
717725
oprinfo[i].oprcanhash=strdup(PQgetvalue(res,i,i_oprcanhash));
718726
oprinfo[i].oprlsortop=strdup(PQgetvalue(res,i,i_oprlsortop));
719727
oprinfo[i].oprrsortop=strdup(PQgetvalue(res,i,i_oprrsortop));
728+
oprinfo[i].usename=strdup(PQgetvalue(res,i,i_usename));
720729
}
721730

722731
PQclear(res);
@@ -744,6 +753,7 @@ for(i=0;i<numTypes;++i) {
744753
if(tp[i].typdelim)free(tp[i].typdelim);
745754
if(tp[i].typdefault)free(tp[i].typdefault);
746755
if(tp[i].typrelid)free(tp[i].typrelid);
756+
if(tp[i].usename)free(tp[i].usename);
747757
}
748758
free(tp);
749759
}
@@ -756,7 +766,7 @@ if(!fun) return;
756766
for(i=0;i<numFuncs;++i) {
757767
if(fun[i].oid)free(fun[i].oid);
758768
if(fun[i].proname)free(fun[i].proname);
759-
if(fun[i].proowner)free(fun[i].proowner);
769+
if(fun[i].usename)free(fun[i].usename);
760770
for(a=0;a<8;++a)
761771
if(fun[i].argtypes[a])free(fun[i].argtypes[a]);
762772
if(fun[i].prorettype)free(fun[i].prorettype);
@@ -783,6 +793,7 @@ for(i=0;i<numTables;++i) {
783793
if(tblinfo[i].inhAttrs)free((int*)tblinfo[i].inhAttrs);
784794
if(tblinfo[i].attnames)free (tblinfo[i].attnames);
785795
if(tblinfo[i].typnames)free (tblinfo[i].typnames);
796+
if(tblinfo[i].usename)free (tblinfo[i].usename);
786797
}
787798
free(tblinfo);
788799
}
@@ -816,6 +827,7 @@ for(i=0;i<numOprs;++i) {
816827
if(opr[i].oprcanhash)free(opr[i].oprcanhash);
817828
if(opr[i].oprlsortop)free(opr[i].oprlsortop);
818829
if(opr[i].oprrsortop)free(opr[i].oprrsortop);
830+
if(opr[i].usename)free(opr[i].usename);
819831
}
820832
free(opr);
821833
}
@@ -854,6 +866,7 @@ for(i=0;i<numArgs;++i) {
854866
if(agginfo[i].aggtranstype2)free (agginfo[i].aggtranstype2);
855867
if(agginfo[i].agginitval1)free (agginfo[i].agginitval1);
856868
if(agginfo[i].agginitval2)free (agginfo[i].agginitval2);
869+
if(agginfo[i].usename)free (agginfo[i].usename);
857870
}
858871
free (agginfo);
859872
}
@@ -886,6 +899,7 @@ getAggregates(int *numAggs)
886899
inti_aggtranstype2;
887900
inti_agginitval1;
888901
inti_agginitval2;
902+
inti_usename;
889903

890904
/* find all user-defined aggregates */
891905

@@ -898,9 +912,10 @@ getAggregates(int *numAggs)
898912
PQclear(res);
899913

900914
sprintf(query,
901-
"SELECT oid, aggname, aggtransfn1, aggtransfn2, aggfinalfn, "
902-
"aggtranstype1, aggbasetype, aggtranstype2, agginitval1, "
903-
"agginitval2 from pg_aggregate;");
915+
"SELECT pg_aggregate.oid, aggname, aggtransfn1, aggtransfn2, "
916+
"aggfinalfn, aggtranstype1, aggbasetype, aggtranstype2, "
917+
"agginitval1, agginitval2, usename from pg_aggregate, pg_user "
918+
"where aggowner = usesysid");
904919

905920
res=PQexec(g_conn,query);
906921
if (!res||
@@ -924,6 +939,7 @@ getAggregates(int *numAggs)
924939
i_aggtranstype2=PQfnumber(res,"aggtranstype2");
925940
i_agginitval1=PQfnumber(res,"agginitval1");
926941
i_agginitval2=PQfnumber(res,"agginitval2");
942+
i_usename=PQfnumber(res,"usename");
927943

928944
for (i=0;i<ntups;i++) {
929945
agginfo[i].oid=strdup(PQgetvalue(res,i,i_oid));
@@ -936,6 +952,7 @@ getAggregates(int *numAggs)
936952
agginfo[i].aggtranstype2=strdup(PQgetvalue(res,i,i_aggtranstype2));
937953
agginfo[i].agginitval1=strdup(PQgetvalue(res,i,i_agginitval1));
938954
agginfo[i].agginitval2=strdup(PQgetvalue(res,i,i_agginitval2));
955+
agginfo[i].usename=strdup(PQgetvalue(res,i,i_usename));
939956
}
940957

941958
PQclear(res);
@@ -965,14 +982,14 @@ getFuncs(int *numFuncs)
965982

966983
inti_oid;
967984
inti_proname;
968-
inti_proowner;
969985
inti_prolang;
970986
inti_pronargs;
971987
inti_proargtypes;
972988
inti_prorettype;
973989
inti_proretset;
974990
inti_prosrc;
975991
inti_probin;
992+
inti_usename;
976993

977994
/* find all user-defined funcs */
978995

@@ -985,9 +1002,10 @@ getFuncs(int *numFuncs)
9851002
PQclear(res);
9861003

9871004
sprintf(query,
988-
"SELECT oid, proname, proowner, prolang, pronargs, prorettype, "
989-
"proretset, proargtypes, prosrc, probin from pg_proc "
990-
"where oid > '%d'::oid",
1005+
"SELECT pg_proc.oid, proname, prolang, pronargs, prorettype, "
1006+
"proretset, proargtypes, prosrc, probin, usename "
1007+
"from pg_proc, pg_user "
1008+
"where pg_proc.oid > '%d'::oid and proowner = usesysid",
9911009
g_last_builtin_oid);
9921010

9931011
res=PQexec(g_conn,query);
@@ -1005,19 +1023,18 @@ getFuncs(int *numFuncs)
10051023

10061024
i_oid=PQfnumber(res,"oid");
10071025
i_proname=PQfnumber(res,"proname");
1008-
i_proowner=PQfnumber(res,"proowner");
10091026
i_prolang=PQfnumber(res,"prolang");
10101027
i_pronargs=PQfnumber(res,"pronargs");
10111028
i_proargtypes=PQfnumber(res,"proargtypes");
10121029
i_prorettype=PQfnumber(res,"prorettype");
10131030
i_proretset=PQfnumber(res,"proretset");
10141031
i_prosrc=PQfnumber(res,"prosrc");
10151032
i_probin=PQfnumber(res,"probin");
1033+
i_usename=PQfnumber(res,"usename");
10161034

10171035
for (i=0;i<ntups;i++) {
10181036
finfo[i].oid=strdup(PQgetvalue(res,i,i_oid));
10191037
finfo[i].proname=strdup(PQgetvalue(res,i,i_proname));
1020-
finfo[i].proowner=strdup(PQgetvalue(res,i,i_proowner));
10211038

10221039
finfo[i].prosrc=checkForQuote(PQgetvalue(res,i,i_prosrc));
10231040
finfo[i].probin=strdup(PQgetvalue(res,i,i_probin));
@@ -1027,6 +1044,8 @@ getFuncs(int *numFuncs)
10271044
finfo[i].nargs=atoi(PQgetvalue(res,i,i_pronargs));
10281045
finfo[i].lang= (atoi(PQgetvalue(res,i,i_prolang))==C_PROLANG_OID);
10291046

1047+
finfo[i].usename=strdup(PQgetvalue(res,i,i_usename));
1048+
10301049
parseArgTypes(finfo[i].argtypes,PQgetvalue(res,i,i_proargtypes));
10311050

10321051
finfo[i].dumped=0;
@@ -1063,6 +1082,7 @@ getTables(int *numTables)
10631082
inti_relarch;
10641083
inti_relkind;
10651084
inti_relacl;
1085+
inti_usename;
10661086

10671087
/* find all the user-defined tables (no indices and no catalogs),
10681088
ordering by oid is important so that we always process the parent
@@ -1079,9 +1099,11 @@ getTables(int *numTables)
10791099
PQclear(res);
10801100

10811101
sprintf(query,
1082-
"SELECT oid, relname, relarch, relkind, relacl from pg_class "
1083-
"where (relkind = 'r' or relkind = 'S') and relname !~ '^pg_' "
1084-
"and relname !~ '^xin[xv][0-9]+' order by oid;");
1102+
"SELECT pg_class.oid, relname, relarch, relkind, relacl, usename "
1103+
"from pg_class, pg_user "
1104+
"where relowner = usesysid and "
1105+
"(relkind = 'r' or relkind = 'S') and relname !~ '^pg_' "
1106+
"and relname !~ '^xin[xv][0-9]+' order by oid");
10851107

10861108
res=PQexec(g_conn,query);
10871109
if (!res||
@@ -1101,13 +1123,15 @@ getTables(int *numTables)
11011123
i_relarch=PQfnumber(res,"relarch");
11021124
i_relkind=PQfnumber(res,"relkind");
11031125
i_relacl=PQfnumber(res,"relacl");
1126+
i_usename=PQfnumber(res,"usename");
11041127

11051128
for (i=0;i<ntups;i++) {
11061129
tblinfo[i].oid=strdup(PQgetvalue(res,i,i_oid));
11071130
tblinfo[i].relname=strdup(PQgetvalue(res,i,i_relname));
11081131
tblinfo[i].relarch=strdup(PQgetvalue(res,i,i_relarch));
11091132
tblinfo[i].relacl=strdup(PQgetvalue(res,i,i_relacl));
11101133
tblinfo[i].sequence= (strcmp (PQgetvalue(res,i,i_relkind),"S")==0);
1134+
tblinfo[i].usename=strdup(PQgetvalue(res,i,i_usename));
11111135
}
11121136

11131137
PQclear(res);
@@ -1305,7 +1329,7 @@ getIndices(int *numIndices)
13051329
"from pg_index i, pg_class t1, pg_class t2, pg_am a "
13061330
"where t1.oid = i.indexrelid and t2.oid = i.indrelid "
13071331
"and t1.relam = a.oid and i.indexrelid > '%d'::oid "
1308-
"and t2.relname !~ '^pg_' and t1.relname !~ '^Xinx' ;",
1332+
"and t2.relname !~ '^pg_' and t1.relname !~ '^Xinx'",
13091333
g_last_builtin_oid);
13101334

13111335
res=PQexec(g_conn,query);
@@ -1384,6 +1408,8 @@ dumpTypes(FILE* fout, FuncInfo* finfo, int numFuncs,
13841408
if (funcInd!=-1)
13851409
dumpOneFunc(fout,finfo,funcInd,tinfo,numTypes);
13861410

1411+
fprintf(fout,"\\connect - %s\n",tinfo[i].usename);
1412+
13871413
sprintf(q,
13881414
"CREATE TYPE %s "
13891415
"( internallength = %s, externallength = %s, input = %s, "
@@ -1448,6 +1474,8 @@ dumpOneFunc(FILE* fout, FuncInfo* finfo, int i,
14481474
else
14491475
finfo[i].dumped=1;
14501476

1477+
fprintf(fout,"\\connect - %s\n",finfo[i].usename);
1478+
14511479
sprintf(q,"CREATE FUNCTION %s (",finfo[i].proname);
14521480
for (j=0;j<finfo[i].nargs;j++) {
14531481
char*typname;
@@ -1547,6 +1575,8 @@ dumpOprs(FILE* fout, OprInfo* oprinfo, int numOperators,
15471575
oprinfo[i].oprlsortop));
15481576
}
15491577

1578+
fprintf(fout,"\\connect - %s\n",oprinfo[i].usename);
1579+
15501580
sprintf(q,
15511581
"CREATE OPERATOR %s "
15521582
"(PROCEDURE = %s %s %s %s %s %s %s %s %s);\n ",
@@ -1627,6 +1657,8 @@ dumpAggs(FILE* fout, AggInfo* agginfo, int numAggs,
16271657
}else
16281658
comma2[0]='\0';
16291659

1660+
fprintf(fout,"\\connect - %s\n",agginfo[i].usename);
1661+
16301662
sprintf(q,"CREATE AGGREGATE %s ( %s %s %s %s %s );\n",
16311663
agginfo[i].aggname,
16321664
sfunc1,
@@ -1677,6 +1709,8 @@ void dumpTables(FILE* fout, TableInfo *tblinfo, int numTables,
16771709
parentRels=tblinfo[i].parentRels;
16781710
numParents=tblinfo[i].numParents;
16791711

1712+
fprintf(fout,"\\connect - %s\n",tblinfo[i].usename);
1713+
16801714
sprintf(q,"CREATE TABLE %s (",tblinfo[i].relname);
16811715
actual_atts=0;
16821716
for (j=0;j<tblinfo[i].numatts;j++) {
@@ -2006,7 +2040,7 @@ findLastBuiltinOid(void)
20062040
intlast_oid;
20072041

20082042
res=PQexec(g_conn,
2009-
"SELECT oid from pg_database where datname = 'template1';");
2043+
"SELECT oid from pg_database where datname = 'template1'");
20102044
if (res==NULL||
20112045
PQresultStatus(res)!=PGRES_TUPLES_OK) {
20122046
fprintf(stderr,"pg_dump error in finding the template1 database\n");
@@ -2066,7 +2100,7 @@ static void dumpSequence (FILE* fout, TableInfo tbinfo)
20662100

20672101
sprintf (query,
20682102
"SELECT sequence_name, last_value, increment_by, max_value, "
2069-
"min_value, cache_value, is_cycled, is_called from %s;",
2103+
"min_value, cache_value, is_cycled, is_called from %s",
20702104
tbinfo.relname);
20712105

20722106
res=PQexec (g_conn,query);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp