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

Commitf23cce7

Browse files
committed
Use the new GUC variable default_with_oids in pg_dump, rather than using
WITH/WITHOUT OIDS in dump files. This makes dump files more portable.I have updated the pg_dump version so old binary dumps will load fine.Pre-7.5 dumps use WITHOUT OIDS in SQL were needed, so they should befine.
1 parent533d091 commitf23cce7

File tree

4 files changed

+108
-43
lines changed

4 files changed

+108
-43
lines changed

‎src/bin/pg_dump/pg_backup.h

Lines changed: 2 additions & 2 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.h,v 1.28 2003/12/06 03:00:11 tgl Exp $
18+
*$PostgreSQL: pgsql/src/bin/pg_dump/pg_backup.h,v 1.29 2004/03/24 03:06:08 momjian Exp $
1919
*
2020
*-------------------------------------------------------------------------
2121
*/
@@ -130,7 +130,7 @@ PGconn *ConnectDatabase(Archive *AH,
130130
externvoidArchiveEntry(Archive*AHX,
131131
CatalogIdcatalogId,DumpIddumpId,
132132
constchar*tag,
133-
constchar*namespace,constchar*owner,
133+
constchar*namespace,constchar*owner,boolwithOids,
134134
constchar*desc,constchar*defn,
135135
constchar*dropStmt,constchar*copyStmt,
136136
constDumpId*deps,intnDeps,

‎src/bin/pg_dump/pg_backup_archiver.c

Lines changed: 67 additions & 5 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.84 2004/03/03 21:28:54 tgl Exp $
18+
*$PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.85 2004/03/24 03:06:08 momjian Exp $
1919
*
2020
*-------------------------------------------------------------------------
2121
*/
@@ -53,6 +53,7 @@ static void fixPriorBlobRefs(ArchiveHandle *AH, TocEntry *blobte,
5353
RestoreOptions*ropt);
5454
staticvoid_doSetFixedOutputState(ArchiveHandle*AH);
5555
staticvoid_doSetSessionAuth(ArchiveHandle*AH,constchar*user);
56+
staticvoid_doSetWithOids(ArchiveHandle*AH,constboolwithOids);
5657
staticvoid_reconnectToDB(ArchiveHandle*AH,constchar*dbname,constchar*user);
5758
staticvoid_becomeUser(ArchiveHandle*AH,constchar*user);
5859
staticvoid_becomeOwner(ArchiveHandle*AH,TocEntry*te);
@@ -254,6 +255,7 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt)
254255
if ((reqs&REQ_SCHEMA)!=0)/* We want the schema */
255256
{
256257
ahlog(AH,1,"creating %s %s\n",te->desc,te->tag);
258+
257259
_printTocEntry(AH,te,ropt, false);
258260
defnDumped= true;
259261

@@ -559,7 +561,7 @@ void
559561
ArchiveEntry(Archive*AHX,
560562
CatalogIdcatalogId,DumpIddumpId,
561563
constchar*tag,
562-
constchar*namespace,constchar*owner,
564+
constchar*namespace,constchar*owner,boolwithOids,
563565
constchar*desc,constchar*defn,
564566
constchar*dropStmt,constchar*copyStmt,
565567
constDumpId*deps,intnDeps,
@@ -587,6 +589,7 @@ ArchiveEntry(Archive *AHX,
587589
newToc->tag=strdup(tag);
588590
newToc->namespace=namespace ?strdup(namespace) :NULL;
589591
newToc->owner=strdup(owner);
592+
newToc->withOids=withOids;
590593
newToc->desc=strdup(desc);
591594
newToc->defn=strdup(defn);
592595
newToc->dropStmt=strdup(dropStmt);
@@ -1597,7 +1600,8 @@ _allocAH(const char *FileSpec, const ArchiveFormat fmt,
15971600
AH->currUser=strdup("");/* So it's valid, but we can free() it
15981601
* later if necessary */
15991602
AH->currSchema=strdup("");/* ditto */
1600-
1603+
AH->currWithOids=-1;/* force SET */
1604+
16011605
AH->toc= (TocEntry*)calloc(1,sizeof(TocEntry));
16021606
if (!AH->toc)
16031607
die_horribly(AH,modulename,"out of memory\n");
@@ -1727,6 +1731,7 @@ WriteToc(ArchiveHandle *AH)
17271731
WriteStr(AH,te->copyStmt);
17281732
WriteStr(AH,te->namespace);
17291733
WriteStr(AH,te->owner);
1734+
WriteStr(AH,te->withOids ?"true" :"false");
17301735

17311736
/* Dump list of dependencies */
17321737
for (i=0;i<te->nDeps;i++)
@@ -1795,7 +1800,16 @@ ReadToc(ArchiveHandle *AH)
17951800
te->namespace=ReadStr(AH);
17961801

17971802
te->owner=ReadStr(AH);
1798-
1803+
if (AH->version >=K_VERS_1_9)
1804+
{
1805+
if (strcmp(ReadStr(AH),"true")==0)
1806+
te->withOids= true;
1807+
else
1808+
te->withOids= false;
1809+
}
1810+
else
1811+
te->withOids= true;
1812+
17991813
/* Read TOC entry dependencies */
18001814
if (AH->version >=K_VERS_1_5)
18011815
{
@@ -2009,6 +2023,37 @@ _doSetSessionAuth(ArchiveHandle *AH, const char *user)
20092023
}
20102024

20112025

2026+
/*
2027+
* Issue a SET default_with_oids command. Caller is responsible
2028+
* for updating state if appropriate.
2029+
*/
2030+
staticvoid
2031+
_doSetWithOids(ArchiveHandle*AH,constboolwithOids)
2032+
{
2033+
PQExpBuffercmd=createPQExpBuffer();
2034+
2035+
appendPQExpBuffer(cmd,"SET default_with_oids = %s;",withOids ?
2036+
"true" :"false");
2037+
2038+
if (RestoringToDB(AH))
2039+
{
2040+
PGresult*res;
2041+
2042+
res=PQexec(AH->connection,cmd->data);
2043+
2044+
if (!res||PQresultStatus(res)!=PGRES_COMMAND_OK)
2045+
die_horribly(AH,modulename,"could not set default_with_oids: %s",
2046+
PQerrorMessage(AH->connection));
2047+
2048+
PQclear(res);
2049+
}
2050+
else
2051+
ahprintf(AH,"%s\n\n",cmd->data);
2052+
2053+
destroyPQExpBuffer(cmd);
2054+
}
2055+
2056+
20122057
/*
20132058
* Issue the commands to connect to the specified database
20142059
* as the specified user.
@@ -2049,7 +2094,8 @@ _reconnectToDB(ArchiveHandle *AH, const char *dbname, const char *user)
20492094
if (AH->currSchema)
20502095
free(AH->currSchema);
20512096
AH->currSchema=strdup("");
2052-
2097+
AH->currWithOids=-1;
2098+
20532099
/* re-establish fixed state */
20542100
_doSetFixedOutputState(AH);
20552101
}
@@ -2094,6 +2140,20 @@ _becomeOwner(ArchiveHandle *AH, TocEntry *te)
20942140
}
20952141

20962142

2143+
/*
2144+
* Set the proper default_with_oids value for the table.
2145+
*/
2146+
staticvoid
2147+
_setWithOids(ArchiveHandle*AH,TocEntry*te)
2148+
{
2149+
if (AH->currWithOids!=te->withOids)
2150+
{
2151+
_doSetWithOids(AH,te->withOids);
2152+
AH->currWithOids=te->withOids;
2153+
}
2154+
}
2155+
2156+
20972157
/*
20982158
* Issue the commands to select the specified schema as the current schema
20992159
* in the target database.
@@ -2146,6 +2206,8 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isDat
21462206
/* Select owner and schema as necessary */
21472207
_becomeOwner(AH,te);
21482208
_selectOutputSchema(AH,te->namespace);
2209+
if (strcmp(te->desc,"TABLE")==0)
2210+
_setWithOids(AH,te);
21492211

21502212
if (isData)
21512213
pfx="Data for ";

‎src/bin/pg_dump/pg_backup_archiver.h

Lines changed: 7 additions & 4 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.56 2004/02/24 03:35:19 tgl Exp $
20+
*$PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.h,v 1.57 2004/03/24 03:06:08 momjian Exp $
2121
*
2222
*-------------------------------------------------------------------------
2323
*/
@@ -62,7 +62,7 @@ typedef z_stream *z_streamp;
6262
#endif
6363

6464
#defineK_VERS_MAJOR 1
65-
#defineK_VERS_MINOR8
65+
#defineK_VERS_MINOR9
6666
#defineK_VERS_REV 0
6767

6868
/* Data block types */
@@ -80,8 +80,9 @@ typedef z_stream *z_streamp;
8080
#defineK_VERS_1_7 (( (1 * 256 + 7) * 256 + 0) * 256 + 0)/* File Offset size in
8181
* header */
8282
#defineK_VERS_1_8 (( (1 * 256 + 8) * 256 + 0) * 256 + 0)/* change interpretation of ID numbers and dependencies */
83+
#defineK_VERS_1_9 (( (1 * 256 + 9) * 256 + 0) * 256 + 0)/* add default_with_oids tracking */
8384

84-
#defineK_VERS_MAX (( (1 * 256 +8) * 256 + 255) * 256 + 0)
85+
#defineK_VERS_MAX (( (1 * 256 +9) * 256 + 255) * 256 + 0)
8586

8687
/* No of BLOBs to restore in 1 TX */
8788
#defineBLOB_BATCH_SIZE 100
@@ -245,7 +246,8 @@ typedef struct _archiveHandle
245246
/* these vars track state to avoid sending redundant SET commands */
246247
char*currUser;/* current username */
247248
char*currSchema;/* current schema */
248-
249+
boolcurrWithOids;/* current default_with_oids setting */
250+
249251
void*lo_buf;
250252
size_tlo_buf_used;
251253
size_tlo_buf_size;
@@ -262,6 +264,7 @@ typedef struct _tocEntry
262264
char*tag;/* index tag */
263265
char*namespace;/* null or empty string if not in a schema */
264266
char*owner;
267+
boolwithOids;/* Used only by "TABLE" tags */
265268
char*desc;
266269
char*defn;
267270
char*dropStmt;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp