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

Commita5375bf

Browse files
committed
Make pg_dump/pg_restore --clean options drop large objects too.
In passing, make invocations of lo_xxx functions a bit more schema-safe.Itagaki Takahiro
1 parent5dedce6 commita5375bf

File tree

6 files changed

+30
-20
lines changed

6 files changed

+30
-20
lines changed

‎src/bin/pg_dump/pg_backup_archiver.c

Lines changed: 10 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.172 2009/06/11 14:49:07 momjian Exp $
18+
*$PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.173 2009/07/21 21:46:10 tgl Exp $
1919
*
2020
*-------------------------------------------------------------------------
2121
*/
@@ -895,7 +895,7 @@ EndRestoreBlobs(ArchiveHandle *AH)
895895
* Called by a format handler to initiate restoration of a blob
896896
*/
897897
void
898-
StartRestoreBlob(ArchiveHandle*AH,Oidoid)
898+
StartRestoreBlob(ArchiveHandle*AH,Oidoid,booldrop)
899899
{
900900
OidloOid;
901901

@@ -906,6 +906,10 @@ StartRestoreBlob(ArchiveHandle *AH, Oid oid)
906906

907907
ahlog(AH,2,"restoring large object with OID %u\n",oid);
908908

909+
if (drop)
910+
ahprintf(AH,"SELECT CASE WHEN EXISTS(SELECT 1 FROM pg_catalog.pg_largeobject WHERE loid = '%u') THEN pg_catalog.lo_unlink('%u') END;\n",
911+
oid,oid);
912+
909913
if (AH->connection)
910914
{
911915
loOid=lo_create(AH->connection,oid);
@@ -919,7 +923,8 @@ StartRestoreBlob(ArchiveHandle *AH, Oid oid)
919923
}
920924
else
921925
{
922-
ahprintf(AH,"SELECT lo_open(lo_create(%u), %d);\n",oid,INV_WRITE);
926+
ahprintf(AH,"SELECT pg_catalog.lo_open(pg_catalog.lo_create('%u'), %d);\n",
927+
oid,INV_WRITE);
923928
}
924929

925930
AH->writingBlob=1;
@@ -943,7 +948,7 @@ EndRestoreBlob(ArchiveHandle *AH, Oid oid)
943948
}
944949
else
945950
{
946-
ahprintf(AH,"SELECT lo_close(0);\n\n");
951+
ahprintf(AH,"SELECTpg_catalog.lo_close(0);\n\n");
947952
}
948953
}
949954

@@ -1254,7 +1259,7 @@ dump_lo_buf(ArchiveHandle *AH)
12541259

12551260
/* Hack: turn off writingBlob so ahwrite doesn't recurse to here */
12561261
AH->writingBlob=0;
1257-
ahprintf(AH,"SELECT lowrite(0, '%s');\n",str);
1262+
ahprintf(AH,"SELECTpg_catalog.lowrite(0, '%s');\n",str);
12581263
AH->writingBlob=1;
12591264

12601265
free(str);

‎src/bin/pg_dump/pg_backup_archiver.h

Lines changed: 2 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.79 2009/06/11 14:49:07 momjian Exp $
20+
*$PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.h,v 1.80 2009/07/21 21:46:10 tgl Exp $
2121
*
2222
*-------------------------------------------------------------------------
2323
*/
@@ -355,7 +355,7 @@ intReadOffset(ArchiveHandle *, pgoff_t *);
355355
size_tWriteOffset(ArchiveHandle*,pgoff_t,int);
356356

357357
externvoidStartRestoreBlobs(ArchiveHandle*AH);
358-
externvoidStartRestoreBlob(ArchiveHandle*AH,Oidoid);
358+
externvoidStartRestoreBlob(ArchiveHandle*AH,Oidoid,booldrop);
359359
externvoidEndRestoreBlob(ArchiveHandle*AH,Oidoid);
360360
externvoidEndRestoreBlobs(ArchiveHandle*AH);
361361

‎src/bin/pg_dump/pg_backup_custom.c

Lines changed: 5 additions & 5 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.42 2009/06/11 14:49:07 momjian Exp $
22+
*$PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_custom.c,v 1.43 2009/07/21 21:46:10 tgl Exp $
2323
*
2424
*-------------------------------------------------------------------------
2525
*/
@@ -54,7 +54,7 @@ static void _StartBlobs(ArchiveHandle *AH, TocEntry *te);
5454
staticvoid_StartBlob(ArchiveHandle*AH,TocEntry*te,Oidoid);
5555
staticvoid_EndBlob(ArchiveHandle*AH,TocEntry*te,Oidoid);
5656
staticvoid_EndBlobs(ArchiveHandle*AH,TocEntry*te);
57-
staticvoid_LoadBlobs(ArchiveHandle*AH);
57+
staticvoid_LoadBlobs(ArchiveHandle*AH,booldrop);
5858
staticvoid_Clone(ArchiveHandle*AH);
5959
staticvoid_DeClone(ArchiveHandle*AH);
6060

@@ -501,7 +501,7 @@ _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt)
501501
break;
502502

503503
caseBLK_BLOBS:
504-
_LoadBlobs(AH);
504+
_LoadBlobs(AH,ropt->dropSchema);
505505
break;
506506

507507
default:/* Always have a default */
@@ -622,7 +622,7 @@ _PrintData(ArchiveHandle *AH)
622622
}
623623

624624
staticvoid
625-
_LoadBlobs(ArchiveHandle*AH)
625+
_LoadBlobs(ArchiveHandle*AH,booldrop)
626626
{
627627
Oidoid;
628628

@@ -631,7 +631,7 @@ _LoadBlobs(ArchiveHandle *AH)
631631
oid=ReadInt(AH);
632632
while (oid!=0)
633633
{
634-
StartRestoreBlob(AH,oid);
634+
StartRestoreBlob(AH,oid,drop);
635635
_PrintData(AH);
636636
EndRestoreBlob(AH,oid);
637637
oid=ReadInt(AH);

‎src/bin/pg_dump/pg_backup_files.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
*
2121
*
2222
* IDENTIFICATION
23-
*$PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_files.c,v 1.35 2009/02/02 20:07:37 adunstan Exp $
23+
*$PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_files.c,v 1.36 2009/07/21 21:46:10 tgl Exp $
2424
*
2525
*-------------------------------------------------------------------------
2626
*/
@@ -382,7 +382,7 @@ _LoadBlobs(ArchiveHandle *AH, RestoreOptions *ropt)
382382

383383
while (oid!=0)
384384
{
385-
StartRestoreBlob(AH,oid);
385+
StartRestoreBlob(AH,oid,ropt->dropSchema);
386386
_PrintFileData(AH,fname,ropt);
387387
EndRestoreBlob(AH,oid);
388388
_getBlobTocEntry(AH,&oid,fname);

‎src/bin/pg_dump/pg_backup_null.c

Lines changed: 9 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_null.c,v 1.20 2009/02/02 20:07:37 adunstan Exp $
20+
*$PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_null.c,v 1.21 2009/07/21 21:46:10 tgl Exp $
2121
*
2222
*-------------------------------------------------------------------------
2323
*/
@@ -108,7 +108,7 @@ _WriteBlobData(ArchiveHandle *AH, const void *data, size_t dLen)
108108
if (!str)
109109
die_horribly(AH,NULL,"out of memory\n");
110110

111-
ahprintf(AH,"SELECT lowrite(0, '%s');\n",str);
111+
ahprintf(AH,"SELECTpg_catalog.lowrite(0, '%s');\n",str);
112112

113113
free(str);
114114
}
@@ -149,7 +149,12 @@ _StartBlob(ArchiveHandle *AH, TocEntry *te, Oid oid)
149149
if (oid==0)
150150
die_horribly(AH,NULL,"invalid OID for large object\n");
151151

152-
ahprintf(AH,"SELECT lo_open(lo_create(%u), %d);\n",oid,INV_WRITE);
152+
if (AH->ropt->dropSchema)
153+
ahprintf(AH,"SELECT CASE WHEN EXISTS(SELECT 1 FROM pg_catalog.pg_largeobject WHERE loid = '%u') THEN pg_catalog.lo_unlink('%u') END;\n",
154+
oid,oid);
155+
156+
ahprintf(AH,"SELECT pg_catalog.lo_open(pg_catalog.lo_create('%u'), %d);\n",
157+
oid,INV_WRITE);
153158

154159
AH->WriteDataPtr=_WriteBlobData;
155160
}
@@ -164,7 +169,7 @@ _EndBlob(ArchiveHandle *AH, TocEntry *te, Oid oid)
164169
{
165170
AH->WriteDataPtr=_WriteData;
166171

167-
ahprintf(AH,"SELECT lo_close(0);\n\n");
172+
ahprintf(AH,"SELECTpg_catalog.lo_close(0);\n\n");
168173
}
169174

170175
/*

‎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.65 2009/06/04 19:16:48 tgl Exp $
19+
*$PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_tar.c,v 1.66 2009/07/21 21:46:10 tgl Exp $
2020
*
2121
*-------------------------------------------------------------------------
2222
*/
@@ -729,7 +729,7 @@ _LoadBlobs(ArchiveHandle *AH, RestoreOptions *ropt)
729729
{
730730
ahlog(AH,1,"restoring large object OID %u\n",oid);
731731

732-
StartRestoreBlob(AH,oid);
732+
StartRestoreBlob(AH,oid,ropt->dropSchema);
733733

734734
while ((cnt=tarRead(buf,4095,th))>0)
735735
{

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp