Skip to content

Commit fd5437c

Browse files
committed
Fix breakage created by addition of separate 'acl pass' in pg_dump.
Also clean up incredibly poor style in TocIDRequired() usage.
1 parent 5ca9687 commit fd5437c

File tree

4 files changed

+28
-30
lines changed

4 files changed

+28
-30
lines changed

src/bin/pg_dump/pg_backup_archiver.c

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*
1616
*
1717
* IDENTIFICATION
18-
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.102 2005/01/23 00:03:54 tgl Exp $
18+
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.103 2005/01/25 22:44:31 tgl Exp $
1919
*
2020
*-------------------------------------------------------------------------
2121
*/
@@ -27,21 +27,14 @@
2727
#include "dumputils.h"
2828

2929
#include <ctype.h>
30-
#include <errno.h>
3130
#include <unistd.h>
3231

3332
#include "pqexpbuffer.h"
3433
#include "libpq/libpq-fs.h"
3534

3635

37-
typedef enum _teReqs_
38-
{
39-
REQ_SCHEMA = 1,
40-
REQ_DATA = 2,
41-
REQ_ALL = REQ_SCHEMA + REQ_DATA
42-
} teReqs;
43-
4436
const char *progname;
37+
4538
static char *modulename = gettext_noop("archiver");
4639

4740

@@ -63,7 +56,7 @@ static void _becomeOwner(ArchiveHandle *AH, TocEntry *te);
6356
static void _selectOutputSchema(ArchiveHandle *AH, const char *schemaName);
6457
static void _selectTablespace(ArchiveHandle *AH, const char *tablespace);
6558

66-
static teReqs _tocEntryRequired(TocEntry *te, RestoreOptions *ropt, bool acl_pass);
59+
static teReqs _tocEntryRequired(TocEntry *te, RestoreOptions *ropt, bool include_acls);
6760
static void _disableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt);
6861
static void _enableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt);
6962
static TocEntry *getTocEntryByDumpId(ArchiveHandle *AH, DumpId id);
@@ -135,7 +128,6 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt)
135128
TocEntry *te = AH->toc->next;
136129
teReqs reqs;
137130
OutputContext sav;
138-
int impliedDataOnly;
139131
bool defnDumped;
140132

141133
AH->ropt = ropt;
@@ -188,17 +180,16 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt)
188180
*/
189181
if (!ropt->dataOnly)
190182
{
191-
te = AH->toc->next;
192-
impliedDataOnly = 1;
193-
while (te != AH->toc)
183+
int impliedDataOnly = 1;
184+
185+
for (te = AH->toc->next; te != AH->toc; te = te->next)
194186
{
195-
reqs = _tocEntryRequired(te, ropt, false);
187+
reqs = _tocEntryRequired(te, ropt, true);
196188
if ((reqs & REQ_SCHEMA) != 0)
197189
{ /* It's schema, and it's wanted */
198190
impliedDataOnly = 0;
199191
break;
200192
}
201-
te = te->next;
202193
}
203194
if (impliedDataOnly)
204195
{
@@ -232,7 +223,7 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt)
232223

233224
while (te != AH->toc)
234225
{
235-
reqs = _tocEntryRequired(te, ropt, false);
226+
reqs = _tocEntryRequired(te, ropt, false /* needn't drop ACLs */);
236227
if (((reqs & REQ_SCHEMA) != 0) && te->dropStmt)
237228
{
238229
/* We want the schema */
@@ -248,7 +239,7 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt)
248239
}
249240

250241
/*
251-
* Now process each TOC entry
242+
* Now process each non-ACL TOC entry
252243
*/
253244
te = AH->toc->next;
254245
while (te != AH->toc)
@@ -709,7 +700,7 @@ PrintTOCSummary(Archive *AHX, RestoreOptions *ropt)
709700

710701
while (te != AH->toc)
711702
{
712-
if (_tocEntryRequired(te, ropt, false) != 0)
703+
if (_tocEntryRequired(te, ropt, true) != 0)
713704
ahprintf(AH, "%d; %u %u %s %s %s %s\n", te->dumpId,
714705
te->catalogId.tableoid, te->catalogId.oid,
715706
te->desc, te->namespace ? te->namespace : "-",
@@ -1341,15 +1332,15 @@ getTocEntryByDumpId(ArchiveHandle *AH, DumpId id)
13411332
return NULL;
13421333
}
13431334

1344-
int
1335+
teReqs
13451336
TocIDRequired(ArchiveHandle *AH, DumpId id, RestoreOptions *ropt)
13461337
{
13471338
TocEntry *te = getTocEntryByDumpId(AH, id);
13481339

13491340
if (!te)
13501341
return 0;
13511342

1352-
return _tocEntryRequired(te, ropt, false);
1343+
return _tocEntryRequired(te, ropt, true);
13531344
}
13541345

13551346
size_t
@@ -1971,16 +1962,16 @@ ReadToc(ArchiveHandle *AH)
19711962
}
19721963

19731964
static teReqs
1974-
_tocEntryRequired(TocEntry *te, RestoreOptions *ropt, bool acl_pass)
1965+
_tocEntryRequired(TocEntry *te, RestoreOptions *ropt, bool include_acls)
19751966
{
1976-
teReqs res = 3; /* Schema = 1, Data = 2, Both = 3 */
1967+
teReqs res = REQ_ALL;
19771968

19781969
/* ENCODING objects are dumped specially, so always reject here */
19791970
if (strcmp(te->desc, "ENCODING") == 0)
19801971
return 0;
19811972

19821973
/* If it's an ACL, maybe ignore it */
1983-
if ((!acl_pass || ropt->aclsSkip) && strcmp(te->desc, "ACL") == 0)
1974+
if ((!include_acls || ropt->aclsSkip) && strcmp(te->desc, "ACL") == 0)
19841975
return 0;
19851976

19861977
if (!ropt->create && strcmp(te->desc, "DATABASE") == 0)

src/bin/pg_dump/pg_backup_archiver.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*
1818
*
1919
* IDENTIFICATION
20-
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.h,v 1.62 2004/11/06 19:36:01 tgl Exp $
20+
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.h,v 1.63 2005/01/25 22:44:31 tgl Exp $
2121
*
2222
*-------------------------------------------------------------------------
2323
*/
@@ -164,6 +164,13 @@ typedef enum
164164
STAGE_FINALIZING
165165
} ArchiverStage;
166166

167+
typedef enum
168+
{
169+
REQ_SCHEMA = 1,
170+
REQ_DATA = 2,
171+
REQ_ALL = REQ_SCHEMA + REQ_DATA
172+
} teReqs;
173+
167174
typedef struct _archiveHandle
168175
{
169176
Archive public; /* Public part of archive */
@@ -321,7 +328,7 @@ extern void WriteToc(ArchiveHandle *AH);
321328
extern void ReadToc(ArchiveHandle *AH);
322329
extern void WriteDataChunks(ArchiveHandle *AH);
323330

324-
extern int TocIDRequired(ArchiveHandle *AH, DumpId id, RestoreOptions *ropt);
331+
extern teReqs TocIDRequired(ArchiveHandle *AH, DumpId id, RestoreOptions *ropt);
325332
extern bool checkSeek(FILE *fp);
326333

327334
/*

src/bin/pg_dump/pg_backup_custom.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
*
2020
*
2121
* IDENTIFICATION
22-
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_custom.c,v 1.29 2004/03/03 21:28:54 tgl Exp $
22+
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_custom.c,v 1.30 2005/01/25 22:44:31 tgl Exp $
2323
*
2424
*-------------------------------------------------------------------------
2525
*/
@@ -442,7 +442,7 @@ _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt)
442442

443443
while (id != te->dumpId)
444444
{
445-
if ((TocIDRequired(AH, id, ropt) & 2) != 0)
445+
if ((TocIDRequired(AH, id, ropt) & REQ_DATA) != 0)
446446
die_horribly(AH, modulename,
447447
"Dumping a specific TOC data block out of order is not supported"
448448
" without ID on this input stream (fseek required)\n");

src/bin/pg_dump/pg_backup_tar.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*
1717
*
1818
* IDENTIFICATION
19-
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_tar.c,v 1.46 2004/11/29 03:01:54 momjian Exp $
19+
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_tar.c,v 1.47 2005/01/25 22:44:31 tgl Exp $
2020
*
2121
*-------------------------------------------------------------------------
2222
*/
@@ -1120,7 +1120,7 @@ _tarPositionTo(ArchiveHandle *AH, const char *filename)
11201120
ahlog(AH, 4, "skipping tar member %s\n", th->targetFile);
11211121

11221122
id = atoi(th->targetFile);
1123-
if ((TocIDRequired(AH, id, AH->ropt) & 2) != 0)
1123+
if ((TocIDRequired(AH, id, AH->ropt) & REQ_DATA) != 0)
11241124
die_horribly(AH, modulename, "dumping data out of order is not supported in this archive format: "
11251125
"%s is required, but comes before %s in the archive file.\n",
11261126
th->targetFile, filename);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy