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

Commitd3fdfdc

Browse files
Skip .DS_Store files in server side utils
The macOS Finder application creates .DS_Store files in directorieswhen opened, which creates problems for serverside utilities whichexpect all files to be PostgreSQL specific files. Skip these fileswhen encountered in pg_checksums, pg_rewind and pg_basebackup.This was extracted from a larger patchset for skipping hidden filesand system files, where the concencus was to just skip these. Sincethis is equally likely to happen in every version, backpatch to allsupported versions.Reported-by: Mark Guertin <markguertin@gmail.com>Reviewed-by: Michael Paquier <michael@paquier.xyz>Reviewed-by: Tobias Bussmann <t.bussmann@gmx.net>Discussion:https://postgr.es/m/E258CE50-AB0E-455D-8AAD-BB4FE8F882FB@gmail.comBackpatch-through: v12
1 parentceb224b commitd3fdfdc

File tree

9 files changed

+46
-4
lines changed

9 files changed

+46
-4
lines changed

‎doc/src/sgml/protocol.sgml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2835,7 +2835,7 @@ The commands accepted in replication mode are:
28352835
<para>
28362836
Files other than regular files and directories, such as symbolic
28372837
links (other than for the directories listed above) and special
2838-
device files, are skipped. (Symbolic links
2838+
deviceand operating systemfiles, are skipped. (Symbolic links
28392839
in <filename>pg_tblspc</filename> are maintained.)
28402840
</para>
28412841
</listitem>

‎doc/src/sgml/ref/pg_basebackup.sgml‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -832,7 +832,8 @@ PostgreSQL documentation
832832
The backup will include all files in the data directory and tablespaces,
833833
including the configuration files and any additional files placed in the
834834
directory by third parties, except certain temporary files managed by
835-
PostgreSQL. But only regular files and directories are copied, except that
835+
PostgreSQL and operating system files. But only regular files and
836+
directories are copied, except that
836837
symbolic links used for tablespaces are preserved. Symbolic links pointing
837838
to certain directories known to PostgreSQL are copied as empty directories.
838839
Other symbolic links and special device files are skipped.

‎doc/src/sgml/ref/pg_rewind.sgml‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,8 +374,9 @@ GRANT EXECUTE ON function pg_catalog.pg_read_binary_file(text, bigint, bigint, b
374374
<filename>backup_label</filename>,
375375
<filename>tablespace_map</filename>,
376376
<filename>pg_internal.init</filename>,
377-
<filename>postmaster.opts</filename>, and
378-
<filename>postmaster.pid</filename>, as well as any file or directory
377+
<filename>postmaster.opts</filename>,
378+
<filename>postmaster.pid</filename> and
379+
<filename>.DS_Store</filename> as well as any file or directory
379380
beginning with <filename>pgsql_tmp</filename>, are omitted.
380381
</para>
381382
</step>

‎src/backend/replication/basebackup.c‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1262,6 +1262,10 @@ sendDir(const char *path, int basepathlen, bool sizeonly, List *tablespaces,
12621262
strlen(PG_TEMP_FILE_PREFIX))==0)
12631263
continue;
12641264

1265+
/* Skip macOS system files */
1266+
if (strcmp(de->d_name,".DS_Store")==0)
1267+
continue;
1268+
12651269
/*
12661270
* Check if the postmaster has signaled us to exit, and abort with an
12671271
* error in that case. The error handler further up will call

‎src/bin/pg_basebackup/t/010_pg_basebackup.pl‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,16 @@
7373
close$file;
7474
}
7575

76+
# Test that macOS system files are skipped. Only test on non-macOS systems
77+
# however since creating incorrect .DS_Store files on a macOS system may have
78+
# unintended side effects.
79+
if ($Config{osname}ne'darwin')
80+
{
81+
openmy$file,'>>',"$pgdata/.DS_Store";
82+
print$file"DONOTCOPY";
83+
close$file;
84+
}
85+
7686
# Connect to a database to create global/pg_internal.init. If this is removed
7787
# the test to ensure global/pg_internal.init is not copied will return a false
7888
# positive.
@@ -141,6 +151,12 @@
141151
ok(!-f"$tempdir/backup/$filename","$filename not copied");
142152
}
143153

154+
# We only test .DS_Store files being skipped on non-macOS systems
155+
if ($Config{osname}ne'darwin')
156+
{
157+
ok(!-f"$tempdir/backup/.DS_Store",".DS_Store not copied");
158+
}
159+
144160
# Unlogged relation forks other than init should not be copied
145161
ok(-f"$tempdir/backup/${baseUnloggedPath}_init",
146162
'unlogged init fork in backup');

‎src/bin/pg_checksums/pg_checksums.c‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,10 @@ scan_directory(const char *basedir, const char *subdir, bool sizeonly)
338338
strlen(PG_TEMP_FILES_DIR))==0)
339339
continue;
340340

341+
/* Skip macOS system files */
342+
if (strcmp(de->d_name,".DS_Store")==0)
343+
continue;
344+
341345
snprintf(fn,sizeof(fn),"%s/%s",path,de->d_name);
342346
if (lstat(fn,&st)<0)
343347
{

‎src/bin/pg_checksums/t/002_actions.pl‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
use strict;
55
use warnings;
6+
use Config;
67
use PostgresNode;
78
use TestLib;
89
use Test::Moretests=> 63;
@@ -110,6 +111,12 @@ sub check_relation_corruption
110111
append_to_file"$pgdata/global/pg_internal.init","foo";
111112
append_to_file"$pgdata/global/pg_internal.init.123","foo";
112113

114+
# These are non-postgres macOS files, which should be ignored by the scan.
115+
# Only perform this test on non-macOS systems though as creating incorrect
116+
# system files may have side effects on macOS.
117+
append_to_file"$pgdata/global/.DS_Store","foo"
118+
unless ($Config{osname}eq'darwin');
119+
113120
# Enable checksums.
114121
command_ok(['pg_checksums','--enable','--no-sync','-D',$pgdata ],
115122
"checksums successfully enabled in cluster");

‎src/bin/pg_rewind/filemap.c‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -749,6 +749,10 @@ isRelDataFile(const char *path)
749749
}
750750
}
751751

752+
/* Skip macOS system files */
753+
if (strstr(path,".DS_Store")!=NULL)
754+
returnFILE_ACTION_NONE;
755+
752756
/*
753757
* The sscanf tests above can match files that have extra characters at
754758
* the end. To eliminate such cases, cross-check that GetRelationPath

‎src/bin/pg_rewind/t/003_extrafiles.pl‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
use strict;
44
use warnings;
5+
use Config;
56
use TestLib;
67
use Test::Moretests=> 5;
78

@@ -44,6 +45,10 @@ sub run_test
4445
append_to_file
4546
"$test_standby_datadir/tst_standby_dir/standby_subdir/standby_file3",
4647
"in standby3";
48+
# Skip testing .DS_Store files on macOS to avoid risk of side effects
49+
append_to_file
50+
"$test_standby_datadir/tst_standby_dir/.DS_Store",
51+
"macOS system file"unless ($Config{osname}eq'darwin');
4752

4853
mkdir"$test_master_datadir/tst_master_dir";
4954
append_to_file"$test_master_datadir/tst_master_dir/master_file1",

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp