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

Commit5102f39

Browse files
committed
Stabilize pg_dump output order for similarly-named triggers and policies.
The code only compared two triggers' names and namespaces (the latterbeing the owning table's schema). This could result in falling backto an OID-based sort of similarly-named triggers on different tables.We prefer to avoid that, so add a comparison of the table names too.(The sort order is thus table namespace, trigger name, table name,which is a bit odd, but it doesn't seem worth contorting the codeto work around that.)Likewise for policy objects, in 9.5 and up.Complaint and fix by Benjie Gillam. Back-patch to all supportedbranches.Discussion:https://postgr.es/m/CAMThMzEEt2mvBbPgCaZ1Ap1N-moGn=Edxmadddjq89WG4NpPtQ@mail.gmail.com
1 parentec28808 commit5102f39

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

‎src/bin/pg_dump/pg_dump_sort.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ DOTypeNameCompare(const void *p1, const void *p2)
164164
FuncInfo*fobj2=*(FuncInfo*const*)p2;
165165
inti;
166166

167+
/* Sort by number of arguments, then argument type names */
167168
cmpval=fobj1->nargs-fobj2->nargs;
168169
if (cmpval!=0)
169170
returncmpval;
@@ -202,10 +203,33 @@ DOTypeNameCompare(const void *p1, const void *p2)
202203
AttrDefInfo*adobj1=*(AttrDefInfo*const*)p1;
203204
AttrDefInfo*adobj2=*(AttrDefInfo*const*)p2;
204205

206+
/* Sort by attribute number */
205207
cmpval= (adobj1->adnum-adobj2->adnum);
206208
if (cmpval!=0)
207209
returncmpval;
208210
}
211+
elseif (obj1->objType==DO_POLICY)
212+
{
213+
PolicyInfo*pobj1=*(PolicyInfo*const*)p1;
214+
PolicyInfo*pobj2=*(PolicyInfo*const*)p2;
215+
216+
/* Sort by table name (table namespace was considered already) */
217+
cmpval=strcmp(pobj1->poltable->dobj.name,
218+
pobj2->poltable->dobj.name);
219+
if (cmpval!=0)
220+
returncmpval;
221+
}
222+
elseif (obj1->objType==DO_TRIGGER)
223+
{
224+
TriggerInfo*tobj1=*(TriggerInfo*const*)p1;
225+
TriggerInfo*tobj2=*(TriggerInfo*const*)p2;
226+
227+
/* Sort by table name (table namespace was considered already) */
228+
cmpval=strcmp(tobj1->tgtable->dobj.name,
229+
tobj2->tgtable->dobj.name);
230+
if (cmpval!=0)
231+
returncmpval;
232+
}
209233

210234
/* Usually shouldn't get here, but if we do, sort by OID */
211235
returnoidcmp(obj1->catId.oid,obj2->catId.oid);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp