postgres.git / summary / log / commit / refs

commit    350e6b8ea86c22c0b95c2e32a4e8d109255b5596
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Mon Nov 04 18:30:30 2024 +0000

    pg_dump: provide a stable sort order for rules.
    
    Previously, we sorted rules by schema name and then rule name;
    if that wasn't unique, we sorted by rule OID.  This can be
    problematic for comparing dumps from databases with different
    histories, especially since certain rule names like "_RETURN"
    are very common.  Let's make the sort key schema name, rule name,
    table name, which should be unique.  (This is the same behavior
    we've long used for triggers and RLS policies.)
    
    Andreas Karlsson
    
    Discussion: https://postgr.es/m/b4e468d8-0cd6-42e6-ac8a-1d6afa6e0cf1@proxel.se


src/bin/pg_dump/pg_dump_sort.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/bin/pg_dump/pg_dump_sort.c b/src/bin/pg_dump/pg_dump_sort.c index 4cb754caa55..675bbf12338 100644 --- a/src/bin/pg_dump/pg_dump_sort.c +++ b/src/bin/pg_dump/pg_dump_sort.c @@ -294,6 +294,17 @@ DOTypeNameCompare(const void *p1, const void *p2) if (cmpval != 0) return cmpval; } + else if (obj1->objType == DO_RULE) + { + RuleInfo *robj1 = *(RuleInfo *const *) p1; + RuleInfo *robj2 = *(RuleInfo *const *) p2; + + /* Sort by table name (table namespace was considered already) */ + cmpval = strcmp(robj1->ruletable->dobj.name, + robj2->ruletable->dobj.name); + if (cmpval != 0) + return cmpval; + } else if (obj1->objType == DO_TRIGGER) { TriggerInfo *tobj1 = *(TriggerInfo *const *) p1; [parent: 215f7af27d62]