diff --git a/contrib/pg_tde/src/bin/pg_tde_archive_decrypt.c b/contrib/pg_tde/src/bin/pg_tde_archive_decrypt.c index 40d4a4ffab8b9..48c05aea601a0 100644 --- a/contrib/pg_tde/src/bin/pg_tde_archive_decrypt.c +++ b/contrib/pg_tde/src/bin/pg_tde_archive_decrypt.c @@ -16,7 +16,8 @@ static bool is_segment(const char *filename) { - return strspn(filename, "0123456789ABCDEF") == XLOG_FNAME_LEN && filename[XLOG_FNAME_LEN] == '\0'; + return strspn(filename, "0123456789ABCDEF") == XLOG_FNAME_LEN && + (filename[XLOG_FNAME_LEN] == '\0' || strcmp(filename + XLOG_FNAME_LEN, ".partial") == 0); } static void diff --git a/contrib/pg_tde/src/bin/pg_tde_restore_encrypt.c b/contrib/pg_tde/src/bin/pg_tde_restore_encrypt.c index 154946990ec7d..2217eb80d3217 100644 --- a/contrib/pg_tde/src/bin/pg_tde_restore_encrypt.c +++ b/contrib/pg_tde/src/bin/pg_tde_restore_encrypt.c @@ -13,10 +13,17 @@ #define TMPFS_DIRECTORY "/dev/shm" +/* + * Partial WAL segments are archived but never automatically fetched from the + * archive by the restore_command. We support them here for symmetry though + * since if someone would want to fetch a partial segment from the archive and + * write it to pg_wal then they would want it encrypted. + */ static bool is_segment(const char *filename) { - return strspn(filename, "0123456789ABCDEF") == XLOG_FNAME_LEN && filename[XLOG_FNAME_LEN] == '\0'; + return strspn(filename, "0123456789ABCDEF") == XLOG_FNAME_LEN && + (filename[XLOG_FNAME_LEN] == '\0' || strcmp(filename + XLOG_FNAME_LEN, ".partial") == 0); } static void