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

Commit6a3e578

Browse files
committed
Fix pg_dump --clean with partitioned indexes.
We'd try to drop the partitions of a partitioned index separately,which is disallowed by the backend, leading to an error duringrestore. While the error is harmless, it causes problems if youtry to use --single-transaction mode.Fortunately, there seems no need to do a DROP at all, since thepartition will go away silently when we drop either the parent indexor the partition's table. So just make the DROP conditional on notbeing a partition.Reported-by: jian he <jian.universality@gmail.com>Author: jian he <jian.universality@gmail.com>Reviewed-by: Pavel Stehule <pavel.stehule@gmail.com>Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>Discussion:https://postgr.es/m/CACJufxF0QSdkjFKF4di-JGWN6CSdQYEAhGPmQJJCdkSZtd=oLg@mail.gmail.comBackpatch-through: 13
1 parentc7597a1 commit6a3e578

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

‎src/bin/pg_dump/pg_dump.c

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17015,7 +17015,17 @@ dumpIndex(Archive *fout, IndxInfo *indxinfo)
1701517015
qindxname);
1701617016
}
1701717017

17018-
appendPQExpBuffer(delq, "DROP INDEX %s;\n", qqindxname);
17018+
/*
17019+
* If this index is a member of a partitioned index, the backend will
17020+
* not allow us to drop it separately, so don't try. It will go away
17021+
* automatically when we drop either the index's table or the
17022+
* partitioned index. (If, in a selective restore with --clean, we
17023+
* drop neither of those, then this index will not be dropped either.
17024+
* But that's fine, and even if you think it's not, the backend won't
17025+
* let us do differently.)
17026+
*/
17027+
if (indxinfo->parentidx == 0)
17028+
appendPQExpBuffer(delq, "DROP INDEX %s;\n", qqindxname);
1701917029

1702017030
if (indxinfo->dobj.dump & DUMP_COMPONENT_DEFINITION)
1702117031
ArchiveEntry(fout, indxinfo->dobj.catId, indxinfo->dobj.dumpId,
@@ -17069,11 +17079,15 @@ dumpIndexAttach(Archive *fout, IndexAttachInfo *attachinfo)
1706917079
fmtQualifiedDumpable(attachinfo->partitionIdx));
1707017080

1707117081
/*
17072-
* There is no point in creating a drop query as the drop is done by
17073-
* index drop. (If you think to change this, see also
17074-
* _printTocEntry().) Although this object doesn't really have
17075-
* ownership as such, set the owner field anyway to ensure that the
17076-
* command is run by the correct role at restore time.
17082+
* There is no need for a dropStmt since the drop is done implicitly
17083+
* when we drop either the index's table or the partitioned index.
17084+
* Moreover, since there's no ALTER INDEX DETACH PARTITION command,
17085+
* there's no way to do it anyway. (If you think to change this,
17086+
* consider also what to do with --if-exists.)
17087+
*
17088+
* Although this object doesn't really have ownership as such, set the
17089+
* owner field anyway to ensure that the command is run by the correct
17090+
* role at restore time.
1707717091
*/
1707817092
ArchiveEntry(fout, attachinfo->dobj.catId, attachinfo->dobj.dumpId,
1707917093
ARCHIVE_OPTS(.tag = attachinfo->dobj.name,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp