mirror of
https://github.com/postgres/postgres.git
synced 2025-10-18 04:29:09 +03:00
Core support for "extensions", which are packages of SQL objects.
This patch adds the server infrastructure to support extensions. There is still one significant loose end, namely how to make it play nice with pg_upgrade, so I am not yet committing the changes that would make all the contrib modules depend on this feature. In passing, fix a disturbingly large amount of breakage in AlterObjectNamespace() and callers. Dimitri Fontaine, reviewed by Anssi Kääriäinen, Itagaki Takahiro, Tom Lane, and numerous others
This commit is contained in:
@@ -191,7 +191,7 @@ static RangeVar *makeRangeVarFromAnyName(List *names, int position, core_yyscan_
|
||||
AlterDefaultPrivilegesStmt DefACLAction
|
||||
AnalyzeStmt ClosePortalStmt ClusterStmt CommentStmt
|
||||
ConstraintsSetStmt CopyStmt CreateAsStmt CreateCastStmt
|
||||
CreateDomainStmt CreateGroupStmt CreateOpClassStmt
|
||||
CreateDomainStmt CreateExtensionStmt CreateGroupStmt CreateOpClassStmt
|
||||
CreateOpFamilyStmt AlterOpFamilyStmt CreatePLangStmt
|
||||
CreateSchemaStmt CreateSeqStmt CreateStmt CreateTableSpaceStmt
|
||||
CreateFdwStmt CreateForeignServerStmt CreateForeignTableStmt
|
||||
@@ -227,9 +227,9 @@ static RangeVar *makeRangeVarFromAnyName(List *names, int position, core_yyscan_
|
||||
%type <dbehavior> opt_drop_behavior
|
||||
|
||||
%type <list> createdb_opt_list alterdb_opt_list copy_opt_list
|
||||
transaction_mode_list
|
||||
transaction_mode_list create_extension_opt_list
|
||||
%type <defelt> createdb_opt_item alterdb_opt_item copy_opt_item
|
||||
transaction_mode_item
|
||||
transaction_mode_item create_extension_opt_item
|
||||
|
||||
%type <ival> opt_lock lock_type cast_context
|
||||
%type <ival> vacuum_option_list vacuum_option_elem
|
||||
@@ -492,7 +492,8 @@ static RangeVar *makeRangeVarFromAnyName(List *names, int position, core_yyscan_
|
||||
DICTIONARY DISABLE_P DISCARD DISTINCT DO DOCUMENT_P DOMAIN_P DOUBLE_P DROP
|
||||
|
||||
EACH ELSE ENABLE_P ENCODING ENCRYPTED END_P ENUM_P ESCAPE EXCEPT
|
||||
EXCLUDE EXCLUDING EXCLUSIVE EXECUTE EXISTS EXPLAIN EXTERNAL EXTRACT
|
||||
EXCLUDE EXCLUDING EXCLUSIVE EXECUTE EXISTS EXPLAIN
|
||||
EXTENSION EXTERNAL EXTRACT
|
||||
|
||||
FALSE_P FAMILY FETCH FIRST_P FLOAT_P FOLLOWING FOR FORCE FOREIGN FORWARD
|
||||
FREEZE FROM FULL FUNCTION FUNCTIONS
|
||||
@@ -692,6 +693,7 @@ stmt :
|
||||
| CreateCastStmt
|
||||
| CreateConversionStmt
|
||||
| CreateDomainStmt
|
||||
| CreateExtensionStmt
|
||||
| CreateFdwStmt
|
||||
| CreateForeignServerStmt
|
||||
| CreateForeignTableStmt
|
||||
@@ -3215,6 +3217,37 @@ DropTableSpaceStmt: DROP TABLESPACE name
|
||||
}
|
||||
;
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* QUERY:
|
||||
* CREATE EXTENSION extension
|
||||
* [ WITH ] [ SCHEMA [=] schema ]
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
CreateExtensionStmt: CREATE EXTENSION name opt_with create_extension_opt_list
|
||||
{
|
||||
CreateExtensionStmt *n = makeNode(CreateExtensionStmt);
|
||||
n->extname = $3;
|
||||
n->options = $5;
|
||||
$$ = (Node *) n;
|
||||
}
|
||||
;
|
||||
|
||||
create_extension_opt_list:
|
||||
create_extension_opt_list create_extension_opt_item
|
||||
{ $$ = lappend($1, $2); }
|
||||
| /* EMPTY */
|
||||
{ $$ = NIL; }
|
||||
;
|
||||
|
||||
create_extension_opt_item:
|
||||
SCHEMA opt_equal name
|
||||
{
|
||||
$$ = makeDefElem("schema", (Node *)makeString($3));
|
||||
}
|
||||
;
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* QUERY:
|
||||
@@ -4340,11 +4373,12 @@ drop_type: TABLE { $$ = OBJECT_TABLE; }
|
||||
| SEQUENCE { $$ = OBJECT_SEQUENCE; }
|
||||
| VIEW { $$ = OBJECT_VIEW; }
|
||||
| INDEX { $$ = OBJECT_INDEX; }
|
||||
| TYPE_P { $$ = OBJECT_TYPE; }
|
||||
| FOREIGN TABLE { $$ = OBJECT_FOREIGN_TABLE; }
|
||||
| TYPE_P { $$ = OBJECT_TYPE; }
|
||||
| DOMAIN_P { $$ = OBJECT_DOMAIN; }
|
||||
| CONVERSION_P { $$ = OBJECT_CONVERSION; }
|
||||
| SCHEMA { $$ = OBJECT_SCHEMA; }
|
||||
| EXTENSION { $$ = OBJECT_EXTENSION; }
|
||||
| TEXT_P SEARCH PARSER { $$ = OBJECT_TSPARSER; }
|
||||
| TEXT_P SEARCH DICTIONARY { $$ = OBJECT_TSDICTIONARY; }
|
||||
| TEXT_P SEARCH TEMPLATE { $$ = OBJECT_TSTEMPLATE; }
|
||||
@@ -4398,7 +4432,7 @@ opt_restart_seqs:
|
||||
*
|
||||
* COMMENT ON [ [ DATABASE | DOMAIN | INDEX | SEQUENCE | TABLE | TYPE | VIEW |
|
||||
* CONVERSION | LANGUAGE | OPERATOR CLASS | LARGE OBJECT |
|
||||
* CAST | COLUMN | SCHEMA | TABLESPACE | ROLE |
|
||||
* CAST | COLUMN | SCHEMA | TABLESPACE | EXTENSION | ROLE |
|
||||
* TEXT SEARCH PARSER | TEXT SEARCH DICTIONARY |
|
||||
* TEXT SEARCH TEMPLATE | TEXT SEARCH CONFIGURATION |
|
||||
* FOREIGN TABLE ] <objname> |
|
||||
@@ -4577,6 +4611,7 @@ comment_type:
|
||||
| VIEW { $$ = OBJECT_VIEW; }
|
||||
| CONVERSION_P { $$ = OBJECT_CONVERSION; }
|
||||
| TABLESPACE { $$ = OBJECT_TABLESPACE; }
|
||||
| EXTENSION { $$ = OBJECT_EXTENSION; }
|
||||
| ROLE { $$ = OBJECT_ROLE; }
|
||||
| FOREIGN TABLE { $$ = OBJECT_FOREIGN_TABLE; }
|
||||
;
|
||||
@@ -6271,6 +6306,14 @@ AlterObjectSchemaStmt:
|
||||
n->newschema = $6;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| ALTER EXTENSION any_name SET SCHEMA name
|
||||
{
|
||||
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
|
||||
n->objectType = OBJECT_EXTENSION;
|
||||
n->object = $3;
|
||||
n->newschema = $6;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| ALTER FUNCTION function_with_argtypes SET SCHEMA name
|
||||
{
|
||||
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
|
||||
@@ -11462,6 +11505,7 @@ unreserved_keyword:
|
||||
| EXCLUSIVE
|
||||
| EXECUTE
|
||||
| EXPLAIN
|
||||
| EXTENSION
|
||||
| EXTERNAL
|
||||
| FAMILY
|
||||
| FIRST_P
|
||||
|
Reference in New Issue
Block a user