aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/commands/extension.c19
-rw-r--r--src/backend/parser/gram.y157
-rw-r--r--src/test/modules/test_pg_dump/expected/test_pg_dump.out4
3 files changed, 31 insertions, 149 deletions
diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c
index 9b669d95b80..472e69fdaf9 100644
--- a/src/backend/commands/extension.c
+++ b/src/backend/commands/extension.c
@@ -3269,6 +3269,25 @@ ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *stmt,
Relation relation;
Oid oldExtension;
+ switch (stmt->objtype)
+ {
+ case OBJECT_DATABASE:
+ case OBJECT_EXTENSION:
+ case OBJECT_INDEX:
+ case OBJECT_PUBLICATION:
+ case OBJECT_ROLE:
+ case OBJECT_STATISTIC_EXT:
+ case OBJECT_SUBSCRIPTION:
+ case OBJECT_TABLESPACE:
+ ereport(ERROR,
+ (errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
+ errmsg("cannot add an object of this type to an extension")));
+ break;
+ default:
+ /* OK */
+ break;
+ }
+
extension.classId = ExtensionRelationId;
extension.objectId = get_extension_oid(stmt->extname, false);
extension.objectSubId = 0;
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index b0d6ad10608..e669d75a5af 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -4546,50 +4546,41 @@ alter_extension_opt_item:
*****************************************************************************/
AlterExtensionContentsStmt:
- ALTER EXTENSION name add_drop ACCESS METHOD name
+ ALTER EXTENSION name add_drop object_type_name name
{
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
n->action = $4;
- n->objtype = OBJECT_ACCESS_METHOD;
- n->object = (Node *) makeString($7);
+ n->objtype = $5;
+ n->object = (Node *) makeString($6);
$$ = (Node *)n;
}
- | ALTER EXTENSION name add_drop AGGREGATE aggregate_with_argtypes
+ | ALTER EXTENSION name add_drop object_type_any_name any_name
{
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
n->action = $4;
- n->objtype = OBJECT_AGGREGATE;
+ n->objtype = $5;
n->object = (Node *) $6;
$$ = (Node *)n;
}
- | ALTER EXTENSION name add_drop CAST '(' Typename AS Typename ')'
- {
- AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
- n->extname = $3;
- n->action = $4;
- n->objtype = OBJECT_CAST;
- n->object = (Node *) list_make2($7, $9);
- $$ = (Node *) n;
- }
- | ALTER EXTENSION name add_drop COLLATION any_name
+ | ALTER EXTENSION name add_drop AGGREGATE aggregate_with_argtypes
{
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
n->action = $4;
- n->objtype = OBJECT_COLLATION;
+ n->objtype = OBJECT_AGGREGATE;
n->object = (Node *) $6;
$$ = (Node *)n;
}
- | ALTER EXTENSION name add_drop CONVERSION_P any_name
+ | ALTER EXTENSION name add_drop CAST '(' Typename AS Typename ')'
{
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
n->action = $4;
- n->objtype = OBJECT_CONVERSION;
- n->object = (Node *) $6;
- $$ = (Node *)n;
+ n->objtype = OBJECT_CAST;
+ n->object = (Node *) list_make2($7, $9);
+ $$ = (Node *) n;
}
| ALTER EXTENSION name add_drop DOMAIN_P Typename
{
@@ -4609,15 +4600,6 @@ AlterExtensionContentsStmt:
n->object = (Node *) $6;
$$ = (Node *)n;
}
- | ALTER EXTENSION name add_drop opt_procedural LANGUAGE name
- {
- AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
- n->extname = $3;
- n->action = $4;
- n->objtype = OBJECT_LANGUAGE;
- n->object = (Node *) makeString($7);
- $$ = (Node *)n;
- }
| ALTER EXTENSION name add_drop OPERATOR operator_with_argtypes
{
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
@@ -4663,123 +4645,6 @@ AlterExtensionContentsStmt:
n->object = (Node *) $6;
$$ = (Node *)n;
}
- | ALTER EXTENSION name add_drop SCHEMA name
- {
- AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
- n->extname = $3;
- n->action = $4;
- n->objtype = OBJECT_SCHEMA;
- n->object = (Node *) makeString($6);
- $$ = (Node *)n;
- }
- | ALTER EXTENSION name add_drop EVENT TRIGGER name
- {
- AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
- n->extname = $3;
- n->action = $4;
- n->objtype = OBJECT_EVENT_TRIGGER;
- n->object = (Node *) makeString($7);
- $$ = (Node *)n;
- }
- | ALTER EXTENSION name add_drop TABLE any_name
- {
- AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
- n->extname = $3;
- n->action = $4;
- n->objtype = OBJECT_TABLE;
- n->object = (Node *) $6;
- $$ = (Node *)n;
- }
- | ALTER EXTENSION name add_drop TEXT_P SEARCH PARSER any_name
- {
- AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
- n->extname = $3;
- n->action = $4;
- n->objtype = OBJECT_TSPARSER;
- n->object = (Node *) $8;
- $$ = (Node *)n;
- }
- | ALTER EXTENSION name add_drop TEXT_P SEARCH DICTIONARY any_name
- {
- AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
- n->extname = $3;
- n->action = $4;
- n->objtype = OBJECT_TSDICTIONARY;
- n->object = (Node *) $8;
- $$ = (Node *)n;
- }
- | ALTER EXTENSION name add_drop TEXT_P SEARCH TEMPLATE any_name
- {
- AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
- n->extname = $3;
- n->action = $4;
- n->objtype = OBJECT_TSTEMPLATE;
- n->object = (Node *) $8;
- $$ = (Node *)n;
- }
- | ALTER EXTENSION name add_drop TEXT_P SEARCH CONFIGURATION any_name
- {
- AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
- n->extname = $3;
- n->action = $4;
- n->objtype = OBJECT_TSCONFIGURATION;
- n->object = (Node *) $8;
- $$ = (Node *)n;
- }
- | ALTER EXTENSION name add_drop SEQUENCE any_name
- {
- AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
- n->extname = $3;
- n->action = $4;
- n->objtype = OBJECT_SEQUENCE;
- n->object = (Node *) $6;
- $$ = (Node *)n;
- }
- | ALTER EXTENSION name add_drop VIEW any_name
- {
- AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
- n->extname = $3;
- n->action = $4;
- n->objtype = OBJECT_VIEW;
- n->object = (Node *) $6;
- $$ = (Node *)n;
- }
- | ALTER EXTENSION name add_drop MATERIALIZED VIEW any_name
- {
- AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
- n->extname = $3;
- n->action = $4;
- n->objtype = OBJECT_MATVIEW;
- n->object = (Node *) $7;
- $$ = (Node *)n;
- }
- | ALTER EXTENSION name add_drop FOREIGN TABLE any_name
- {
- AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
- n->extname = $3;
- n->action = $4;
- n->objtype = OBJECT_FOREIGN_TABLE;
- n->object = (Node *) $7;
- $$ = (Node *)n;
- }
- | ALTER EXTENSION name add_drop FOREIGN DATA_P WRAPPER name
- {
- AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
- n->extname = $3;
- n->action = $4;
- n->objtype = OBJECT_FDW;
- n->object = (Node *) makeString($8);
- $$ = (Node *)n;
- }
- | ALTER EXTENSION name add_drop SERVER name
- {
- AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
- n->extname = $3;
- n->action = $4;
- n->objtype = OBJECT_FOREIGN_SERVER;
- n->object = (Node *) makeString($6);
- $$ = (Node *)n;
- }
| ALTER EXTENSION name add_drop TRANSFORM FOR Typename LANGUAGE name
{
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
diff --git a/src/test/modules/test_pg_dump/expected/test_pg_dump.out b/src/test/modules/test_pg_dump/expected/test_pg_dump.out
index a50eaf6125d..f14f3a66646 100644
--- a/src/test/modules/test_pg_dump/expected/test_pg_dump.out
+++ b/src/test/modules/test_pg_dump/expected/test_pg_dump.out
@@ -1,9 +1,7 @@
CREATE ROLE regress_dump_test_role;
CREATE EXTENSION test_pg_dump;
ALTER EXTENSION test_pg_dump ADD DATABASE postgres; -- error
-ERROR: syntax error at or near "DATABASE"
-LINE 1: ALTER EXTENSION test_pg_dump ADD DATABASE postgres;
- ^
+ERROR: cannot add an object of this type to an extension
CREATE TABLE test_pg_dump_t1 (c1 int, junk text);
ALTER TABLE test_pg_dump_t1 DROP COLUMN junk; -- to exercise dropped-col cases
CREATE VIEW test_pg_dump_v1 AS SELECT * FROM test_pg_dump_t1;