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

Commit02021f1

Browse files
committed
Fix ALTER EXTENSION SET SCHEMA with objects outside an extension's schema
As coded, the code would use as a base comparison the namespace OID fromthe first object scanned in pg_depend when switching its namespacedependency entry to the new one, and use it as a base of comparison forany follow-up checks. It would also be used as the old namespace OID toswitch *from* for the extension's pg_depend entry. Hence, if the firstobject scanned has a namespace different than the one stored in theextension, we would finish by:- Not checking that the extension objects map with the extension'sschema.- Not switching the extension -> namespace dependency entry to the newnamespace provided by the user, making ALTER EXTENSION ineffective.This issue exists since this command has been introduced ind9572c4 forrelocatable extension, so backpatch all the way down to 11. The testcase has been provided by Heikki, that I have tweaked a bit to show theeffects on pg_depend for the extension.Reported-by: Heikki LinnakangasAuthor: Michael Paquier, Heikki LinnakangasDiscussion:https://postgr.es/m/20eea594-a05b-4c31-491b-007b6fceef28@iki.fiBackpatch-through: 11
1 parent9f23619 commit02021f1

File tree

1 file changed

+4
-7
lines changed

1 file changed

+4
-7
lines changed

‎src/backend/commands/extension.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2706,7 +2706,7 @@ AlterExtensionNamespace(const char *extensionName, const char *newschema, Oid *o
27062706
{
27072707
OidextensionOid;
27082708
OidnspOid;
2709-
OidoldNspOid=InvalidOid;
2709+
OidoldNspOid;
27102710
AclResultaclresult;
27112711
RelationextRel;
27122712
ScanKeyDatakey[2];
@@ -2789,6 +2789,9 @@ AlterExtensionNamespace(const char *extensionName, const char *newschema, Oid *o
27892789

27902790
objsMoved=new_object_addresses();
27912791

2792+
/* store the OID of the namespace to-be-changed */
2793+
oldNspOid=extForm->extnamespace;
2794+
27922795
/*
27932796
* Scan pg_depend to find objects that depend directly on the extension,
27942797
* and alter each one's schema.
@@ -2834,12 +2837,6 @@ AlterExtensionNamespace(const char *extensionName, const char *newschema, Oid *o
28342837
nspOid,
28352838
objsMoved);
28362839

2837-
/*
2838-
* Remember previous namespace of first object that has one
2839-
*/
2840-
if (oldNspOid==InvalidOid&&dep_oldNspOid!=InvalidOid)
2841-
oldNspOid=dep_oldNspOid;
2842-
28432840
/*
28442841
* If not all the objects had the same old namespace (ignoring any
28452842
* that are not in namespaces), complain.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp