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

Commit235e716

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 parent571377d commit235e716

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
@@ -2789,7 +2789,7 @@ AlterExtensionNamespace(const char *extensionName, const char *newschema, Oid *o
27892789
{
27902790
OidextensionOid;
27912791
OidnspOid;
2792-
OidoldNspOid=InvalidOid;
2792+
OidoldNspOid;
27932793
AclResultaclresult;
27942794
RelationextRel;
27952795
ScanKeyDatakey[2];
@@ -2872,6 +2872,9 @@ AlterExtensionNamespace(const char *extensionName, const char *newschema, Oid *o
28722872

28732873
objsMoved=new_object_addresses();
28742874

2875+
/* store the OID of the namespace to-be-changed */
2876+
oldNspOid=extForm->extnamespace;
2877+
28752878
/*
28762879
* Scan pg_depend to find objects that depend directly on the extension,
28772880
* and alter each one's schema.
@@ -2917,12 +2920,6 @@ AlterExtensionNamespace(const char *extensionName, const char *newschema, Oid *o
29172920
nspOid,
29182921
objsMoved);
29192922

2920-
/*
2921-
* Remember previous namespace of first object that has one
2922-
*/
2923-
if (oldNspOid==InvalidOid&&dep_oldNspOid!=InvalidOid)
2924-
oldNspOid=dep_oldNspOid;
2925-
29262923
/*
29272924
* If not all the objects had the same old namespace (ignoring any
29282925
* that are not in namespaces), complain.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp