On Sat, Jul 3, 2021 at 10:39:02AM +0200, Domingo Alvarez Duarte wrote:
> I've done a experimental tool to convert bison grammars to a kind of EBNF
> understood by https://www.bottlecaps.de/rr/ui to generate railroad diagrams
> see
> bellow the converted 'postgresql-13.3/src/backend/parser/gram.y' and with some
> hand made changes to allow view it at https://www.bottlecaps.de/rr/ui the
> order
> of the rules could be changed to a better view of the railroad diagrams. Copy
> and paste the EBNF bellow on https://www.bottlecaps.de/rr/ui tab Edit Grammar
> then switch to the tab View Diagram.
That is pretty cool. I had trouble figuring out how to get it working,
so here are the steps I used:
1. save my attachment (created by Domingo)
2. go to https://www.bottlecaps.de/rr/ui
3. select "Edit Grammar"
4. choose "Browse" at the bottom
5. select the attachment you saved in #1
6. choose "Load" at the bottom
7. select "View Diagram"
You can even click on the yellow boxes to see the sub-grammar. People
have asked for railroad diagrams in the past, and this certainly
produces them, and "Options" allows many customizations.
I tried downloading as XHTML+SVG and HTML+PNG but got an error:
HTTP Status 500 – Internal Server Error
Type Exception Report
Message The multi-part request contained parameter data (excluding
uploaded files) that exceeded the limit for maxPostSize set on the
associated connector
Description The server encountered an unexpected condition that
prevented it from fulfilling the request.
It might be nice to download this output and host it on the Postgres
website at some point.
--
Bruce Momjian <[email protected]> https://momjian.us
EDB https://enterprisedb.com
If only the physical world exists, free will is an illusion.
stmtblock ::= stmtmulti
stmtmulti ::= stmtmulti ';' stmt | stmt
stmt ::= AlterEventTrigStmt | AlterCollationStmt | AlterDatabaseStmt |
AlterDatabaseSetStmt | AlterDefaultPrivilegesStmt | AlterDomainStmt |
AlterEnumStmt | AlterExtensionStmt | AlterExtensionContentsStmt |
AlterFdwStmt | AlterForeignServerStmt | AlterForeignTableStmt |
AlterFunctionStmt | AlterGroupStmt | AlterObjectDependsStmt |
AlterObjectSchemaStmt | AlterOwnerStmt | AlterOperatorStmt |
AlterTypeStmt | AlterPolicyStmt | AlterSeqStmt | AlterSystemStmt |
AlterTableStmt | AlterTblSpcStmt | AlterCompositeTypeStmt |
AlterPublicationStmt | AlterRoleSetStmt | AlterRoleStmt |
AlterSubscriptionStmt | AlterStatsStmt | AlterTSConfigurationStmt |
AlterTSDictionaryStmt | AlterUserMappingStmt | AnalyzeStmt | CallStmt |
CheckPointStmt | ClosePortalStmt | ClusterStmt | CommentStmt |
ConstraintsSetStmt | CopyStmt | CreateAmStmt | CreateAsStmt |
CreateAssertionStmt | CreateCastStmt | CreateConversionStmt |
CreateDomainStmt | CreateExtensionStmt | CreateFdwStmt |
CreateForeignServerStmt | CreateForeignTableStmt | CreateFunctionStmt |
CreateGroupStmt | CreateMatViewStmt | CreateOpClassStmt |
CreateOpFamilyStmt | CreatePublicationStmt | AlterOpFamilyStmt |
CreatePolicyStmt | CreatePLangStmt | CreateSchemaStmt | CreateSeqStmt |
CreateStmt | CreateSubscriptionStmt | CreateStatsStmt |
CreateTableSpaceStmt | CreateTransformStmt | CreateTrigStmt |
CreateEventTrigStmt | CreateRoleStmt | CreateUserStmt |
CreateUserMappingStmt | CreatedbStmt | DeallocateStmt |
DeclareCursorStmt | DefineStmt | DeleteStmt | DiscardStmt | DoStmt |
DropCastStmt | DropOpClassStmt | DropOpFamilyStmt | DropOwnedStmt |
DropPLangStmt | DropStmt | DropSubscriptionStmt | DropTableSpaceStmt |
DropTransformStmt | DropRoleStmt | DropUserMappingStmt | DropdbStmt |
ExecuteStmt | ExplainStmt | FetchStmt | GrantStmt | GrantRoleStmt |
ImportForeignSchemaStmt | IndexStmt | InsertStmt | ListenStmt |
RefreshMatViewStmt | LoadStmt | LockStmt | NotifyStmt | PrepareStmt |
ReassignOwnedStmt | ReindexStmt | RemoveAggrStmt | RemoveFuncStmt |
RemoveOperStmt | RenameStmt | RevokeStmt | RevokeRoleStmt | RuleStmt |
SecLabelStmt | SelectStmt | TransactionStmt | TruncateStmt |
UnlistenStmt | UpdateStmt | VacuumStmt | VariableResetStmt |
VariableSetStmt | VariableShowStmt | ViewStmt |
CallStmt ::= CALL func_application
CreateRoleStmt ::= CREATE ROLE RoleId opt_with OptRoleList
opt_with ::= WITH | WITH_LA |
OptRoleList ::= OptRoleList CreateOptRoleElem |
AlterOptRoleList ::= AlterOptRoleList AlterOptRoleElem |
AlterOptRoleElem ::= PASSWORD Sconst | PASSWORD NULL_P | ENCRYPTED
PASSWORD Sconst | UNENCRYPTED PASSWORD Sconst | INHERIT | CONNECTION
LIMIT SignedIconst | VALID UNTIL Sconst | USER role_list | IDENT
CreateOptRoleElem ::= AlterOptRoleElem | SYSID Iconst | ADMIN role_list
| ROLE role_list | IN_P ROLE role_list | IN_P GROUP_P role_list
CreateUserStmt ::= CREATE USER RoleId opt_with OptRoleList
AlterRoleStmt ::= ALTER ROLE RoleSpec opt_with AlterOptRoleList | ALTER
USER RoleSpec opt_with AlterOptRoleList
opt_in_database ::= | IN_P DATABASE database_name
AlterRoleSetStmt ::= ALTER ROLE RoleSpec opt_in_database SetResetClause
| ALTER ROLE ALL opt_in_database SetResetClause | ALTER USER RoleSpec
opt_in_database SetResetClause | ALTER USER ALL opt_in_database
SetResetClause
DropRoleStmt ::= DROP ROLE role_list | DROP ROLE IF_P EXISTS role_list |
DROP USER role_list | DROP USER IF_P EXISTS role_list | DROP GROUP_P
role_list | DROP GROUP_P IF_P EXISTS role_list
CreateGroupStmt ::= CREATE GROUP_P RoleId opt_with OptRoleList
AlterGroupStmt ::= ALTER GROUP_P RoleSpec add_drop USER role_list
add_drop ::= ADD_P | DROP
CreateSchemaStmt ::= CREATE SCHEMA OptSchemaName AUTHORIZATION RoleSpec
OptSchemaEltList | CREATE SCHEMA ColId OptSchemaEltList | CREATE SCHEMA
IF_P NOT EXISTS OptSchemaName AUTHORIZATION RoleSpec OptSchemaEltList |
CREATE SCHEMA IF_P NOT EXISTS ColId OptSchemaEltList
OptSchemaName ::= ColId |
OptSchemaEltList ::= OptSchemaEltList schema_stmt |
schema_stmt ::= CreateStmt | IndexStmt | CreateSeqStmt | CreateTrigStmt
| GrantStmt | ViewStmt
VariableSetStmt ::= SET set_rest | SET LOCAL set_rest | SET SESSION set_rest
set_rest ::= TRANSACTION transaction_mode_list | SESSION CHARACTERISTICS
AS TRANSACTION transaction_mode_list | set_rest_more
generic_set ::= var_name TO var_list | var_name '=' var_list | var_name
TO DEFAULT | var_name '=' DEFAULT
set_rest_more ::= generic_set | var_name FROM CURRENT_P | TIME ZONE
zone_value | CATALOG_P Sconst | SCHEMA Sconst | NAMES opt_encoding |
ROLE NonReservedWord_or_Sconst | SESSION AUTHORIZATION
NonReservedWord_or_Sconst | SESSION AUTHORIZATION DEFAULT | XML_P OPTION
document_or_content | TRANSACTION SNAPSHOT Sconst
var_name ::= ColId | var_name '.' ColId
var_list ::= var_value | var_list ',' var_value
var_value ::= opt_boolean_or_string | NumericOnly
iso_level ::= READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ |
SERIALIZABLE
opt_boolean_or_string ::= TRUE_P | FALSE_P | ON | NonReservedWord_or_Sconst
zone_value ::= Sconst | IDENT | ConstInterval Sconst opt_interval |
ConstInterval '(' Iconst ')' Sconst | NumericOnly | DEFAULT | LOCAL
opt_encoding ::= Sconst | DEFAULT |
NonReservedWord_or_Sconst ::= NonReservedWord | Sconst
VariableResetStmt ::= RESET reset_rest
reset_rest ::= generic_reset | TIME ZONE | TRANSACTION ISOLATION LEVEL |
SESSION AUTHORIZATION
generic_reset ::= var_name | ALL
SetResetClause ::= SET set_rest | VariableResetStmt
FunctionSetResetClause ::= SET set_rest_more | VariableResetStmt
VariableShowStmt ::= SHOW var_name | SHOW TIME ZONE | SHOW TRANSACTION
ISOLATION LEVEL | SHOW SESSION AUTHORIZATION | SHOW ALL
ConstraintsSetStmt ::= SET CONSTRAINTS constraints_set_list
constraints_set_mode
constraints_set_list ::= ALL | qualified_name_list
constraints_set_mode ::= DEFERRED | IMMEDIATE
CheckPointStmt ::= CHECKPOINT
DiscardStmt ::= DISCARD ALL | DISCARD TEMP | DISCARD TEMPORARY | DISCARD
PLANS | DISCARD SEQUENCES
AlterTableStmt ::= ALTER TABLE relation_expr alter_table_cmds | ALTER
TABLE IF_P EXISTS relation_expr alter_table_cmds | ALTER TABLE
relation_expr partition_cmd | ALTER TABLE IF_P EXISTS relation_expr
partition_cmd | ALTER TABLE ALL IN_P TABLESPACE name SET TABLESPACE name
opt_nowait | ALTER TABLE ALL IN_P TABLESPACE name OWNED BY role_list SET
TABLESPACE name opt_nowait | ALTER INDEX qualified_name alter_table_cmds
| ALTER INDEX IF_P EXISTS qualified_name alter_table_cmds | ALTER INDEX
qualified_name index_partition_cmd | ALTER INDEX ALL IN_P TABLESPACE
name SET TABLESPACE name opt_nowait | ALTER INDEX ALL IN_P TABLESPACE
name OWNED BY role_list SET TABLESPACE name opt_nowait | ALTER SEQUENCE
qualified_name alter_table_cmds | ALTER SEQUENCE IF_P EXISTS
qualified_name alter_table_cmds | ALTER VIEW qualified_name
alter_table_cmds | ALTER VIEW IF_P EXISTS qualified_name
alter_table_cmds | ALTER MATERIALIZED VIEW qualified_name
alter_table_cmds | ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name
alter_table_cmds | ALTER MATERIALIZED VIEW ALL IN_P TABLESPACE name SET
TABLESPACE name opt_nowait | ALTER MATERIALIZED VIEW ALL IN_P TABLESPACE
name OWNED BY role_list SET TABLESPACE name opt_nowait
alter_table_cmds ::= alter_table_cmd | alter_table_cmds ',' alter_table_cmd
partition_cmd ::= ATTACH PARTITION qualified_name PartitionBoundSpec |
DETACH PARTITION qualified_name
index_partition_cmd ::= ATTACH PARTITION qualified_name
alter_table_cmd ::= ADD_P columnDef | ADD_P IF_P NOT EXISTS columnDef |
ADD_P COLUMN columnDef | ADD_P COLUMN IF_P NOT EXISTS columnDef | ALTER
opt_column ColId alter_column_default | ALTER opt_column ColId DROP NOT
NULL_P | ALTER opt_column ColId SET NOT NULL_P | ALTER opt_column ColId
DROP EXPRESSION | ALTER opt_column ColId DROP EXPRESSION IF_P EXISTS |
ALTER opt_column ColId SET STATISTICS SignedIconst | ALTER opt_column
Iconst SET STATISTICS SignedIconst | ALTER opt_column ColId SET
reloptions | ALTER opt_column ColId RESET reloptions | ALTER opt_column
ColId SET STORAGE ColId | ALTER opt_column ColId ADD_P GENERATED
generated_when AS IDENTITY_P OptParenthesizedSeqOptList | ALTER
opt_column ColId alter_identity_column_option_list | ALTER opt_column
ColId DROP IDENTITY_P | ALTER opt_column ColId DROP IDENTITY_P IF_P
EXISTS | DROP opt_column IF_P EXISTS ColId opt_drop_behavior | DROP
opt_column ColId opt_drop_behavior | ALTER opt_column ColId opt_set_data
TYPE_P Typename opt_collate_clause alter_using | ALTER opt_column ColId
alter_generic_options | ADD_P TableConstraint | ALTER CONSTRAINT name
ConstraintAttributeSpec | VALIDATE CONSTRAINT name | DROP CONSTRAINT
IF_P EXISTS name opt_drop_behavior | DROP CONSTRAINT name
opt_drop_behavior | SET WITHOUT OIDS | CLUSTER ON name | SET WITHOUT
CLUSTER | SET LOGGED | SET UNLOGGED | ENABLE_P TRIGGER name | ENABLE_P
ALWAYS TRIGGER name | ENABLE_P REPLICA TRIGGER name | ENABLE_P TRIGGER
ALL | ENABLE_P TRIGGER USER | DISABLE_P TRIGGER name | DISABLE_P TRIGGER
ALL | DISABLE_P TRIGGER USER | ENABLE_P RULE name | ENABLE_P ALWAYS RULE
name | ENABLE_P REPLICA RULE name | DISABLE_P RULE name | INHERIT
qualified_name | NO INHERIT qualified_name | OF any_name | NOT OF |
OWNER TO RoleSpec | SET TABLESPACE name | SET reloptions | RESET
reloptions | REPLICA IDENTITY_P replica_identity | ENABLE_P ROW LEVEL
SECURITY | DISABLE_P ROW LEVEL SECURITY | FORCE ROW LEVEL SECURITY | NO
FORCE ROW LEVEL SECURITY | alter_generic_options
alter_column_default ::= SET DEFAULT a_expr | DROP DEFAULT
opt_drop_behavior ::= CASCADE | RESTRICT |
opt_collate_clause ::= COLLATE any_name |
alter_using ::= USING a_expr |
replica_identity ::= NOTHING | FULL | DEFAULT | USING INDEX name
reloptions ::= '(' reloption_list ')'
opt_reloptions ::= WITH reloptions |
reloption_list ::= reloption_elem | reloption_list ',' reloption_elem
reloption_elem ::= ColLabel '=' def_arg | ColLabel | ColLabel '.'
ColLabel '=' def_arg | ColLabel '.' ColLabel
alter_identity_column_option_list ::= alter_identity_column_option |
alter_identity_column_option_list alter_identity_column_option
alter_identity_column_option ::= RESTART | RESTART opt_with NumericOnly
| SET SeqOptElem | SET GENERATED generated_when
PartitionBoundSpec ::= FOR VALUES WITH '(' hash_partbound ')' | FOR
VALUES IN_P '(' expr_list ')' | FOR VALUES FROM '(' expr_list ')' TO '('
expr_list ')' | DEFAULT
hash_partbound_elem ::= NonReservedWord Iconst
hash_partbound ::= hash_partbound_elem | hash_partbound ','
hash_partbound_elem
AlterCompositeTypeStmt ::= ALTER TYPE_P any_name alter_type_cmds
alter_type_cmds ::= alter_type_cmd | alter_type_cmds ',' alter_type_cmd
alter_type_cmd ::= ADD_P ATTRIBUTE TableFuncElement opt_drop_behavior |
DROP ATTRIBUTE IF_P EXISTS ColId opt_drop_behavior | DROP ATTRIBUTE
ColId opt_drop_behavior | ALTER ATTRIBUTE ColId opt_set_data TYPE_P
Typename opt_collate_clause opt_drop_behavior
ClosePortalStmt ::= CLOSE cursor_name | CLOSE ALL
CopyStmt ::= COPY opt_binary qualified_name opt_column_list copy_from
opt_program copy_file_name copy_delimiter opt_with copy_options
where_clause | COPY '(' PreparableStmt ')' TO opt_program copy_file_name
opt_with copy_options
copy_from ::= FROM | TO
opt_program ::= PROGRAM |
copy_file_name ::= Sconst | STDIN | STDOUT
copy_options ::= copy_opt_list | '(' copy_generic_opt_list ')'
copy_opt_list ::= copy_opt_list copy_opt_item |
copy_opt_item ::= BINARY | FREEZE | DELIMITER opt_as Sconst | NULL_P
opt_as Sconst | CSV | HEADER_P | QUOTE opt_as Sconst | ESCAPE opt_as
Sconst | FORCE QUOTE columnList | FORCE QUOTE '*' | FORCE NOT NULL_P
columnList | FORCE NULL_P columnList | ENCODING Sconst
opt_binary ::= BINARY |
copy_delimiter ::= opt_using DELIMITERS Sconst |
opt_using ::= USING |
copy_generic_opt_list ::= copy_generic_opt_elem | copy_generic_opt_list
',' copy_generic_opt_elem
copy_generic_opt_elem ::= ColLabel copy_generic_opt_arg
copy_generic_opt_arg ::= opt_boolean_or_string | NumericOnly | '*' | '('
copy_generic_opt_arg_list ')' |
copy_generic_opt_arg_list ::= copy_generic_opt_arg_list_item |
copy_generic_opt_arg_list ',' copy_generic_opt_arg_list_item
copy_generic_opt_arg_list_item ::= opt_boolean_or_string
CreateStmt ::= CREATE OptTemp TABLE qualified_name '('
OptTableElementList ')' OptInherit OptPartitionSpec
table_access_method_clause OptWith OnCommitOption OptTableSpace | CREATE
OptTemp TABLE IF_P NOT EXISTS qualified_name '(' OptTableElementList ')'
OptInherit OptPartitionSpec table_access_method_clause OptWith
OnCommitOption OptTableSpace | CREATE OptTemp TABLE qualified_name OF
any_name OptTypedTableElementList OptPartitionSpec
table_access_method_clause OptWith OnCommitOption OptTableSpace | CREATE
OptTemp TABLE IF_P NOT EXISTS qualified_name OF any_name
OptTypedTableElementList OptPartitionSpec table_access_method_clause
OptWith OnCommitOption OptTableSpace | CREATE OptTemp TABLE
qualified_name PARTITION OF qualified_name OptTypedTableElementList
PartitionBoundSpec OptPartitionSpec table_access_method_clause OptWith
OnCommitOption OptTableSpace | CREATE OptTemp TABLE IF_P NOT EXISTS
qualified_name PARTITION OF qualified_name OptTypedTableElementList
PartitionBoundSpec OptPartitionSpec table_access_method_clause OptWith
OnCommitOption OptTableSpace
OptTemp ::= TEMPORARY | TEMP | LOCAL TEMPORARY | LOCAL TEMP | GLOBAL
TEMPORARY | GLOBAL TEMP | UNLOGGED |
OptTableElementList ::= TableElementList |
OptTypedTableElementList ::= '(' TypedTableElementList ')' |
TableElementList ::= TableElement | TableElementList ',' TableElement
TypedTableElementList ::= TypedTableElement | TypedTableElementList ','
TypedTableElement
TableElement ::= columnDef | TableLikeClause | TableConstraint
TypedTableElement ::= columnOptions | TableConstraint
columnDef ::= ColId Typename create_generic_options ColQualList
columnOptions ::= ColId ColQualList | ColId WITH OPTIONS ColQualList
ColQualList ::= ColQualList ColConstraint |
ColConstraint ::= CONSTRAINT name ColConstraintElem | ColConstraintElem
| ConstraintAttr | COLLATE any_name
ColConstraintElem ::= NOT NULL_P | NULL_P | UNIQUE opt_definition
OptConsTableSpace | PRIMARY KEY opt_definition OptConsTableSpace | CHECK
'(' a_expr ')' opt_no_inherit | DEFAULT b_expr | GENERATED
generated_when AS IDENTITY_P OptParenthesizedSeqOptList | GENERATED
generated_when AS '(' a_expr ')' STORED | REFERENCES qualified_name
opt_column_list key_match key_actions
generated_when ::= ALWAYS | BY DEFAULT
ConstraintAttr ::= DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED |
INITIALLY IMMEDIATE
TableLikeClause ::= LIKE qualified_name TableLikeOptionList
TableLikeOptionList ::= TableLikeOptionList INCLUDING TableLikeOption |
TableLikeOptionList EXCLUDING TableLikeOption |
TableLikeOption ::= COMMENTS | CONSTRAINTS | DEFAULTS | IDENTITY_P |
GENERATED | INDEXES | STATISTICS | STORAGE | ALL
TableConstraint ::= CONSTRAINT name ConstraintElem | ConstraintElem
ConstraintElem ::= CHECK '(' a_expr ')' ConstraintAttributeSpec | UNIQUE
'(' columnList ')' opt_c_include opt_definition OptConsTableSpace
ConstraintAttributeSpec | UNIQUE ExistingIndex ConstraintAttributeSpec |
PRIMARY KEY '(' columnList ')' opt_c_include opt_definition
OptConsTableSpace ConstraintAttributeSpec | PRIMARY KEY ExistingIndex
ConstraintAttributeSpec | EXCLUDE access_method_clause '('
ExclusionConstraintList ')' opt_c_include opt_definition
OptConsTableSpace ExclusionWhereClause ConstraintAttributeSpec | FOREIGN
KEY '(' columnList ')' REFERENCES qualified_name opt_column_list
key_match key_actions ConstraintAttributeSpec
opt_no_inherit ::= NO INHERIT |
opt_column_list ::= '(' columnList ')' |
columnList ::= columnElem | columnList ',' columnElem
columnElem ::= ColId
opt_c_include ::= INCLUDE '(' columnList ')' |
key_match ::= MATCH FULL | MATCH PARTIAL | MATCH SIMPLE |
ExclusionConstraintList ::= ExclusionConstraintElem |
ExclusionConstraintList ',' ExclusionConstraintElem
ExclusionConstraintElem ::= index_elem WITH any_operator | index_elem
WITH OPERATOR '(' any_operator ')'
ExclusionWhereClause ::= WHERE '(' a_expr ')' |
key_actions ::= key_update | key_delete | key_update key_delete |
key_delete key_update |
key_update ::= ON UPDATE key_action
key_delete ::= ON DELETE_P key_action
key_action ::= NO ACTION | RESTRICT | CASCADE | SET NULL_P | SET DEFAULT
OptInherit ::= INHERITS '(' qualified_name_list ')' |
OptPartitionSpec ::= PartitionSpec |
PartitionSpec ::= PARTITION BY ColId '(' part_params ')'
part_params ::= part_elem | part_params ',' part_elem
part_elem ::= ColId opt_collate opt_class | func_expr_windowless
opt_collate opt_class | '(' a_expr ')' opt_collate opt_class
table_access_method_clause ::= USING access_method |
OptWith ::= WITH reloptions | WITHOUT OIDS |
OnCommitOption ::= ON COMMIT DROP | ON COMMIT DELETE_P ROWS | ON COMMIT
PRESERVE ROWS |
OptTableSpace ::= TABLESPACE name |
OptConsTableSpace ::= USING INDEX TABLESPACE name |
ExistingIndex ::= USING INDEX index_name
CreateStatsStmt ::= CREATE STATISTICS any_name opt_name_list ON
expr_list FROM from_list | CREATE STATISTICS IF_P NOT EXISTS any_name
opt_name_list ON expr_list FROM from_list
AlterStatsStmt ::= ALTER STATISTICS any_name SET STATISTICS SignedIconst
| ALTER STATISTICS IF_P EXISTS any_name SET STATISTICS SignedIconst
CreateAsStmt ::= CREATE OptTemp TABLE create_as_target AS SelectStmt
opt_with_data | CREATE OptTemp TABLE IF_P NOT EXISTS create_as_target AS
SelectStmt opt_with_data
create_as_target ::= qualified_name opt_column_list
table_access_method_clause OptWith OnCommitOption OptTableSpace
opt_with_data ::= WITH DATA_P | WITH NO DATA_P |
CreateMatViewStmt ::= CREATE OptNoLog MATERIALIZED VIEW create_mv_target
AS SelectStmt opt_with_data | CREATE OptNoLog MATERIALIZED VIEW IF_P NOT
EXISTS create_mv_target AS SelectStmt opt_with_data
create_mv_target ::= qualified_name opt_column_list
table_access_method_clause opt_reloptions OptTableSpace
OptNoLog ::= UNLOGGED |
RefreshMatViewStmt ::= REFRESH MATERIALIZED VIEW opt_concurrently
qualified_name opt_with_data
CreateSeqStmt ::= CREATE OptTemp SEQUENCE qualified_name OptSeqOptList |
CREATE OptTemp SEQUENCE IF_P NOT EXISTS qualified_name OptSeqOptList
AlterSeqStmt ::= ALTER SEQUENCE qualified_name SeqOptList | ALTER
SEQUENCE IF_P EXISTS qualified_name SeqOptList
OptSeqOptList ::= SeqOptList |
OptParenthesizedSeqOptList ::= '(' SeqOptList ')' |
SeqOptList ::= SeqOptElem | SeqOptList SeqOptElem
SeqOptElem ::= AS SimpleTypename | CACHE NumericOnly | CYCLE | NO CYCLE
| INCREMENT opt_by NumericOnly | MAXVALUE NumericOnly | MINVALUE
NumericOnly | NO MAXVALUE | NO MINVALUE | OWNED BY any_name | SEQUENCE
NAME_P any_name | START opt_with NumericOnly | RESTART | RESTART
opt_with NumericOnly
opt_by ::= BY |
NumericOnly ::= FCONST | '+' FCONST | '-' FCONST | SignedIconst
NumericOnly_list ::= NumericOnly | NumericOnly_list ',' NumericOnly
CreatePLangStmt ::= CREATE opt_or_replace opt_trusted opt_procedural
LANGUAGE NonReservedWord_or_Sconst | CREATE opt_or_replace opt_trusted
opt_procedural LANGUAGE NonReservedWord_or_Sconst HANDLER handler_name
opt_inline_handler opt_validator
opt_trusted ::= TRUSTED |
handler_name ::= name | name attrs
opt_inline_handler ::= INLINE_P handler_name |
validator_clause ::= VALIDATOR handler_name | NO VALIDATOR
opt_validator ::= validator_clause |
DropPLangStmt ::= DROP opt_procedural LANGUAGE NonReservedWord_or_Sconst
opt_drop_behavior | DROP opt_procedural LANGUAGE IF_P EXISTS
NonReservedWord_or_Sconst opt_drop_behavior
opt_procedural ::= PROCEDURAL |
CreateTableSpaceStmt ::= CREATE TABLESPACE name OptTableSpaceOwner
LOCATION Sconst opt_reloptions
OptTableSpaceOwner ::= OWNER RoleSpec |
DropTableSpaceStmt ::= DROP TABLESPACE name | DROP TABLESPACE IF_P
EXISTS name
CreateExtensionStmt ::= CREATE EXTENSION name opt_with
create_extension_opt_list | CREATE EXTENSION IF_P NOT EXISTS name
opt_with create_extension_opt_list
create_extension_opt_list ::= create_extension_opt_list
create_extension_opt_item |
create_extension_opt_item ::= SCHEMA name | VERSION_P
NonReservedWord_or_Sconst | FROM NonReservedWord_or_Sconst | CASCADE
AlterExtensionStmt ::= ALTER EXTENSION name UPDATE alter_extension_opt_list
alter_extension_opt_list ::= alter_extension_opt_list
alter_extension_opt_item |
alter_extension_opt_item ::= TO NonReservedWord_or_Sconst
AlterExtensionContentsStmt ::= ALTER EXTENSION name add_drop ACCESS
METHOD name | ALTER EXTENSION name add_drop AGGREGATE
aggregate_with_argtypes | ALTER EXTENSION name add_drop CAST '('
Typename AS Typename ')' | ALTER EXTENSION name add_drop COLLATION
any_name | ALTER EXTENSION name add_drop CONVERSION_P any_name | ALTER
EXTENSION name add_drop DOMAIN_P Typename | ALTER EXTENSION name
add_drop FUNCTION function_with_argtypes | ALTER EXTENSION name add_drop
opt_procedural LANGUAGE name | ALTER EXTENSION name add_drop OPERATOR
operator_with_argtypes | ALTER EXTENSION name add_drop OPERATOR CLASS
any_name USING access_method | ALTER EXTENSION name add_drop OPERATOR
FAMILY any_name USING access_method | ALTER EXTENSION name add_drop
PROCEDURE function_with_argtypes | ALTER EXTENSION name add_drop ROUTINE
function_with_argtypes | ALTER EXTENSION name add_drop SCHEMA name |
ALTER EXTENSION name add_drop EVENT TRIGGER name | ALTER EXTENSION name
add_drop TABLE any_name | ALTER EXTENSION name add_drop TEXT_P SEARCH
PARSER any_name | ALTER EXTENSION name add_drop TEXT_P SEARCH DICTIONARY
any_name | ALTER EXTENSION name add_drop TEXT_P SEARCH TEMPLATE any_name
| ALTER EXTENSION name add_drop TEXT_P SEARCH CONFIGURATION any_name |
ALTER EXTENSION name add_drop SEQUENCE any_name | ALTER EXTENSION name
add_drop VIEW any_name | ALTER EXTENSION name add_drop MATERIALIZED VIEW
any_name | ALTER EXTENSION name add_drop FOREIGN TABLE any_name | ALTER
EXTENSION name add_drop FOREIGN DATA_P WRAPPER name | ALTER EXTENSION
name add_drop SERVER name | ALTER EXTENSION name add_drop TRANSFORM FOR
Typename LANGUAGE name | ALTER EXTENSION name add_drop TYPE_P Typename
CreateFdwStmt ::= CREATE FOREIGN DATA_P WRAPPER name opt_fdw_options
create_generic_options
fdw_option ::= HANDLER handler_name | NO HANDLER | VALIDATOR
handler_name | NO VALIDATOR
fdw_options ::= fdw_option | fdw_options fdw_option
opt_fdw_options ::= fdw_options |
AlterFdwStmt ::= ALTER FOREIGN DATA_P WRAPPER name opt_fdw_options
alter_generic_options | ALTER FOREIGN DATA_P WRAPPER name fdw_options
create_generic_options ::= OPTIONS '(' generic_option_list ')' |
generic_option_list ::= generic_option_elem | generic_option_list ','
generic_option_elem
alter_generic_options ::= OPTIONS '(' alter_generic_option_list ')'
alter_generic_option_list ::= alter_generic_option_elem |
alter_generic_option_list ',' alter_generic_option_elem
alter_generic_option_elem ::= generic_option_elem | SET
generic_option_elem | ADD_P generic_option_elem | DROP generic_option_name
generic_option_elem ::= generic_option_name generic_option_arg
generic_option_name ::= ColLabel
generic_option_arg ::= Sconst
CreateForeignServerStmt ::= CREATE SERVER name opt_type
opt_foreign_server_version FOREIGN DATA_P WRAPPER name
create_generic_options | CREATE SERVER IF_P NOT EXISTS name opt_type
opt_foreign_server_version FOREIGN DATA_P WRAPPER name
create_generic_options
opt_type ::= TYPE_P Sconst |
foreign_server_version ::= VERSION_P Sconst | VERSION_P NULL_P
opt_foreign_server_version ::= foreign_server_version |
AlterForeignServerStmt ::= ALTER SERVER name foreign_server_version
alter_generic_options | ALTER SERVER name foreign_server_version | ALTER
SERVER name alter_generic_options
CreateForeignTableStmt ::= CREATE FOREIGN TABLE qualified_name '('
OptTableElementList ')' OptInherit SERVER name create_generic_options |
CREATE FOREIGN TABLE IF_P NOT EXISTS qualified_name '('
OptTableElementList ')' OptInherit SERVER name create_generic_options |
CREATE FOREIGN TABLE qualified_name PARTITION OF qualified_name
OptTypedTableElementList PartitionBoundSpec SERVER name
create_generic_options | CREATE FOREIGN TABLE IF_P NOT EXISTS
qualified_name PARTITION OF qualified_name OptTypedTableElementList
PartitionBoundSpec SERVER name create_generic_options
AlterForeignTableStmt ::= ALTER FOREIGN TABLE relation_expr
alter_table_cmds | ALTER FOREIGN TABLE IF_P EXISTS relation_expr
alter_table_cmds
ImportForeignSchemaStmt ::= IMPORT_P FOREIGN SCHEMA name
import_qualification FROM SERVER name INTO name create_generic_options
import_qualification_type ::= LIMIT TO | EXCEPT
import_qualification ::= import_qualification_type '('
relation_expr_list ')' |
CreateUserMappingStmt ::= CREATE USER MAPPING FOR auth_ident SERVER name
create_generic_options | CREATE USER MAPPING IF_P NOT EXISTS FOR
auth_ident SERVER name create_generic_options
auth_ident ::= RoleSpec | USER
DropUserMappingStmt ::= DROP USER MAPPING FOR auth_ident SERVER name |
DROP USER MAPPING IF_P EXISTS FOR auth_ident SERVER name
AlterUserMappingStmt ::= ALTER USER MAPPING FOR auth_ident SERVER name
alter_generic_options
CreatePolicyStmt ::= CREATE POLICY name ON qualified_name
RowSecurityDefaultPermissive RowSecurityDefaultForCmd
RowSecurityDefaultToRole RowSecurityOptionalExpr
RowSecurityOptionalWithCheck
AlterPolicyStmt ::= ALTER POLICY name ON qualified_name
RowSecurityOptionalToRole RowSecurityOptionalExpr
RowSecurityOptionalWithCheck
RowSecurityOptionalExpr ::= USING '(' a_expr ')' |
RowSecurityOptionalWithCheck ::= WITH CHECK '(' a_expr ')' |
RowSecurityDefaultToRole ::= TO role_list |
RowSecurityOptionalToRole ::= TO role_list |
RowSecurityDefaultPermissive ::= AS IDENT |
RowSecurityDefaultForCmd ::= FOR row_security_cmd |
row_security_cmd ::= ALL | SELECT | INSERT | UPDATE | DELETE_P
CreateAmStmt ::= CREATE ACCESS METHOD name TYPE_P am_type HANDLER
handler_name
am_type ::= INDEX | TABLE
CreateTrigStmt ::= CREATE TRIGGER name TriggerActionTime TriggerEvents
ON qualified_name TriggerReferencing TriggerForSpec TriggerWhen EXECUTE
FUNCTION_or_PROCEDURE func_name '(' TriggerFuncArgs ')' | CREATE
CONSTRAINT TRIGGER name AFTER TriggerEvents ON qualified_name
OptConstrFromTable ConstraintAttributeSpec FOR EACH ROW TriggerWhen
EXECUTE FUNCTION_or_PROCEDURE func_name '(' TriggerFuncArgs ')'
TriggerActionTime ::= BEFORE | AFTER | INSTEAD OF
TriggerEvents ::= TriggerOneEvent | TriggerEvents OR TriggerOneEvent
TriggerOneEvent ::= INSERT | DELETE_P | UPDATE | UPDATE OF columnList |
TRUNCATE
TriggerReferencing ::= REFERENCING TriggerTransitions |
TriggerTransitions ::= TriggerTransition | TriggerTransitions
TriggerTransition
TriggerTransition ::= TransitionOldOrNew TransitionRowOrTable opt_as
TransitionRelName
TransitionOldOrNew ::= NEW | OLD
TransitionRowOrTable ::= TABLE | ROW
TransitionRelName ::= ColId
TriggerForSpec ::= FOR TriggerForOptEach TriggerForType |
TriggerForOptEach ::= EACH |
TriggerForType ::= ROW | STATEMENT
TriggerWhen ::= WHEN '(' a_expr ')' |
FUNCTION_or_PROCEDURE ::= FUNCTION | PROCEDURE
TriggerFuncArgs ::= TriggerFuncArg | TriggerFuncArgs ',' TriggerFuncArg |
TriggerFuncArg ::= Iconst | FCONST | Sconst | ColLabel
OptConstrFromTable ::= FROM qualified_name |
ConstraintAttributeSpec ::= | ConstraintAttributeSpec
ConstraintAttributeElem
ConstraintAttributeElem ::= NOT DEFERRABLE | DEFERRABLE | INITIALLY
IMMEDIATE | INITIALLY DEFERRED | NOT VALID | NO INHERIT
CreateEventTrigStmt ::= CREATE EVENT TRIGGER name ON ColLabel EXECUTE
FUNCTION_or_PROCEDURE func_name '(' ')' | CREATE EVENT TRIGGER name ON
ColLabel WHEN event_trigger_when_list EXECUTE FUNCTION_or_PROCEDURE
func_name '(' ')'
event_trigger_when_list ::= event_trigger_when_item |
event_trigger_when_list AND event_trigger_when_item
event_trigger_when_item ::= ColId IN_P '(' event_trigger_value_list ')'
event_trigger_value_list ::= SCONST | event_trigger_value_list ',' SCONST
AlterEventTrigStmt ::= ALTER EVENT TRIGGER name enable_trigger
enable_trigger ::= ENABLE_P | ENABLE_P REPLICA | ENABLE_P ALWAYS | DISABLE_P
CreateAssertionStmt ::= CREATE ASSERTION any_name CHECK '(' a_expr ')'
ConstraintAttributeSpec
DefineStmt ::= CREATE opt_or_replace AGGREGATE func_name aggr_args
definition | CREATE opt_or_replace AGGREGATE func_name
old_aggr_definition | CREATE OPERATOR any_operator definition | CREATE
TYPE_P any_name definition | CREATE TYPE_P any_name | CREATE TYPE_P
any_name AS '(' OptTableFuncElementList ')' | CREATE TYPE_P any_name AS
ENUM_P '(' opt_enum_val_list ')' | CREATE TYPE_P any_name AS RANGE
definition | CREATE TEXT_P SEARCH PARSER any_name definition | CREATE
TEXT_P SEARCH DICTIONARY any_name definition | CREATE TEXT_P SEARCH
TEMPLATE any_name definition | CREATE TEXT_P SEARCH CONFIGURATION
any_name definition | CREATE COLLATION any_name definition | CREATE
COLLATION IF_P NOT EXISTS any_name definition | CREATE COLLATION
any_name FROM any_name | CREATE COLLATION IF_P NOT EXISTS any_name FROM
any_name
definition ::= '(' def_list ')'
def_list ::= def_elem | def_list ',' def_elem
def_elem ::= ColLabel '=' def_arg | ColLabel
def_arg ::= func_type | reserved_keyword | qual_all_Op | NumericOnly |
Sconst | NONE
old_aggr_definition ::= '(' old_aggr_list ')'
old_aggr_list ::= old_aggr_elem | old_aggr_list ',' old_aggr_elem
old_aggr_elem ::= IDENT '=' def_arg
opt_enum_val_list ::= enum_val_list |
enum_val_list ::= Sconst | enum_val_list ',' Sconst
AlterEnumStmt ::= ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists
Sconst | ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists Sconst
BEFORE Sconst | ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists
Sconst AFTER Sconst | ALTER TYPE_P any_name RENAME VALUE_P Sconst TO Sconst
opt_if_not_exists ::= IF_P NOT EXISTS |
CreateOpClassStmt ::= CREATE OPERATOR CLASS any_name opt_default FOR
TYPE_P Typename USING access_method opt_opfamily AS opclass_item_list
opclass_item_list ::= opclass_item | opclass_item_list ',' opclass_item
opclass_item ::= OPERATOR Iconst any_operator opclass_purpose
opt_recheck | OPERATOR Iconst operator_with_argtypes opclass_purpose
opt_recheck | FUNCTION Iconst function_with_argtypes | FUNCTION Iconst
'(' type_list ')' function_with_argtypes | STORAGE Typename
opt_default ::= DEFAULT |
opt_opfamily ::= FAMILY any_name |
opclass_purpose ::= FOR SEARCH | FOR ORDER BY any_name |
opt_recheck ::= RECHECK |
CreateOpFamilyStmt ::= CREATE OPERATOR FAMILY any_name USING access_method
AlterOpFamilyStmt ::= ALTER OPERATOR FAMILY any_name USING access_method
ADD_P opclass_item_list | ALTER OPERATOR FAMILY any_name USING
access_method DROP opclass_drop_list
opclass_drop_list ::= opclass_drop | opclass_drop_list ',' opclass_drop
opclass_drop ::= OPERATOR Iconst '(' type_list ')' | FUNCTION Iconst '('
type_list ')'
DropOpClassStmt ::= DROP OPERATOR CLASS any_name USING access_method
opt_drop_behavior | DROP OPERATOR CLASS IF_P EXISTS any_name USING
access_method opt_drop_behavior
DropOpFamilyStmt ::= DROP OPERATOR FAMILY any_name USING access_method
opt_drop_behavior | DROP OPERATOR FAMILY IF_P EXISTS any_name USING
access_method opt_drop_behavior
DropOwnedStmt ::= DROP OWNED BY role_list opt_drop_behavior
ReassignOwnedStmt ::= REASSIGN OWNED BY role_list TO RoleSpec
DropStmt ::= DROP drop_type_any_name IF_P EXISTS any_name_list
opt_drop_behavior | DROP drop_type_any_name any_name_list
opt_drop_behavior | DROP drop_type_name IF_P EXISTS name_list
opt_drop_behavior | DROP drop_type_name name_list opt_drop_behavior |
DROP drop_type_name_on_any_name name ON any_name opt_drop_behavior |
DROP drop_type_name_on_any_name IF_P EXISTS name ON any_name
opt_drop_behavior | DROP TYPE_P type_name_list opt_drop_behavior | DROP
TYPE_P IF_P EXISTS type_name_list opt_drop_behavior | DROP DOMAIN_P
type_name_list opt_drop_behavior | DROP DOMAIN_P IF_P EXISTS
type_name_list opt_drop_behavior | DROP INDEX CONCURRENTLY any_name_list
opt_drop_behavior | DROP INDEX CONCURRENTLY IF_P EXISTS any_name_list
opt_drop_behavior
drop_type_any_name ::= TABLE | SEQUENCE | VIEW | MATERIALIZED VIEW |
INDEX | FOREIGN TABLE | COLLATION | CONVERSION_P | STATISTICS | TEXT_P
SEARCH PARSER | TEXT_P SEARCH DICTIONARY | TEXT_P SEARCH TEMPLATE |
TEXT_P SEARCH CONFIGURATION
drop_type_name ::= ACCESS METHOD | EVENT TRIGGER | EXTENSION | FOREIGN
DATA_P WRAPPER | PUBLICATION | SCHEMA | SERVER
drop_type_name_on_any_name ::= POLICY | RULE | TRIGGER
any_name_list ::= any_name | any_name_list ',' any_name
any_name ::= ColId | ColId attrs
attrs ::= '.' attr_name | attrs '.' attr_name
type_name_list ::= Typename | type_name_list ',' Typename
TruncateStmt ::= TRUNCATE opt_table relation_expr_list opt_restart_seqs
opt_drop_behavior
opt_restart_seqs ::= CONTINUE_P IDENTITY_P | RESTART IDENTITY_P |
CommentStmt ::= COMMENT ON comment_type_any_name any_name IS
comment_text | COMMENT ON comment_type_name name IS comment_text |
COMMENT ON TYPE_P Typename IS comment_text | COMMENT ON DOMAIN_P
Typename IS comment_text | COMMENT ON AGGREGATE aggregate_with_argtypes
IS comment_text | COMMENT ON FUNCTION function_with_argtypes IS
comment_text | COMMENT ON OPERATOR operator_with_argtypes IS
comment_text | COMMENT ON CONSTRAINT name ON any_name IS comment_text |
COMMENT ON CONSTRAINT name ON DOMAIN_P any_name IS comment_text |
COMMENT ON POLICY name ON any_name IS comment_text | COMMENT ON
PROCEDURE function_with_argtypes IS comment_text | COMMENT ON ROUTINE
function_with_argtypes IS comment_text | COMMENT ON RULE name ON
any_name IS comment_text | COMMENT ON TRANSFORM FOR Typename LANGUAGE
name IS comment_text | COMMENT ON TRIGGER name ON any_name IS
comment_text | COMMENT ON OPERATOR CLASS any_name USING access_method IS
comment_text | COMMENT ON OPERATOR FAMILY any_name USING access_method
IS comment_text | COMMENT ON LARGE_P OBJECT_P NumericOnly IS
comment_text | COMMENT ON CAST '(' Typename AS Typename ')' IS comment_text
comment_type_any_name ::= COLUMN | INDEX | SEQUENCE | STATISTICS | TABLE
| VIEW | MATERIALIZED VIEW | COLLATION | CONVERSION_P | FOREIGN TABLE |
TEXT_P SEARCH CONFIGURATION | TEXT_P SEARCH DICTIONARY | TEXT_P SEARCH
PARSER | TEXT_P SEARCH TEMPLATE
comment_type_name ::= ACCESS METHOD | DATABASE | EVENT TRIGGER |
EXTENSION | FOREIGN DATA_P WRAPPER | opt_procedural LANGUAGE |
PUBLICATION | ROLE | SCHEMA | SERVER | SUBSCRIPTION | TABLESPACE
comment_text ::= Sconst | NULL_P
SecLabelStmt ::= SECURITY LABEL opt_provider ON
security_label_type_any_name any_name IS security_label | SECURITY LABEL
opt_provider ON security_label_type_name name IS security_label |
SECURITY LABEL opt_provider ON TYPE_P Typename IS security_label |
SECURITY LABEL opt_provider ON DOMAIN_P Typename IS security_label |
SECURITY LABEL opt_provider ON AGGREGATE aggregate_with_argtypes IS
security_label | SECURITY LABEL opt_provider ON FUNCTION
function_with_argtypes IS security_label | SECURITY LABEL opt_provider
ON LARGE_P OBJECT_P NumericOnly IS security_label | SECURITY LABEL
opt_provider ON PROCEDURE function_with_argtypes IS security_label |
SECURITY LABEL opt_provider ON ROUTINE function_with_argtypes IS
security_label
opt_provider ::= FOR NonReservedWord_or_Sconst |
security_label_type_any_name ::= COLUMN | FOREIGN TABLE | SEQUENCE |
TABLE | VIEW | MATERIALIZED VIEW
security_label_type_name ::= DATABASE | EVENT TRIGGER | opt_procedural
LANGUAGE | PUBLICATION | ROLE | SCHEMA | SUBSCRIPTION | TABLESPACE
security_label ::= Sconst | NULL_P
FetchStmt ::= FETCH fetch_args | MOVE fetch_args
fetch_args ::= cursor_name | from_in cursor_name | NEXT opt_from_in
cursor_name | PRIOR opt_from_in cursor_name | FIRST_P opt_from_in
cursor_name | LAST_P opt_from_in cursor_name | ABSOLUTE_P SignedIconst
opt_from_in cursor_name | RELATIVE_P SignedIconst opt_from_in
cursor_name | SignedIconst opt_from_in cursor_name | ALL opt_from_in
cursor_name | FORWARD opt_from_in cursor_name | FORWARD SignedIconst
opt_from_in cursor_name | FORWARD ALL opt_from_in cursor_name | BACKWARD
opt_from_in cursor_name | BACKWARD SignedIconst opt_from_in cursor_name
| BACKWARD ALL opt_from_in cursor_name
from_in ::= FROM | IN_P
opt_from_in ::= from_in |
GrantStmt ::= GRANT privileges ON privilege_target TO grantee_list
opt_grant_grant_option
RevokeStmt ::= REVOKE privileges ON privilege_target FROM grantee_list
opt_drop_behavior | REVOKE GRANT OPTION FOR privileges ON
privilege_target FROM grantee_list opt_drop_behavior
privileges ::= privilege_list | ALL | ALL PRIVILEGES | ALL '('
columnList ')' | ALL PRIVILEGES '(' columnList ')'
privilege_list ::= privilege | privilege_list ',' privilege
privilege ::= SELECT opt_column_list | REFERENCES opt_column_list |
CREATE opt_column_list | ColId opt_column_list
privilege_target ::= qualified_name_list | TABLE qualified_name_list |
SEQUENCE qualified_name_list | FOREIGN DATA_P WRAPPER name_list |
FOREIGN SERVER name_list | FUNCTION function_with_argtypes_list |
PROCEDURE function_with_argtypes_list | ROUTINE
function_with_argtypes_list | DATABASE name_list | DOMAIN_P
any_name_list | LANGUAGE name_list | LARGE_P OBJECT_P NumericOnly_list |
SCHEMA name_list | TABLESPACE name_list | TYPE_P any_name_list | ALL
TABLES IN_P SCHEMA name_list | ALL SEQUENCES IN_P SCHEMA name_list | ALL
FUNCTIONS IN_P SCHEMA name_list | ALL PROCEDURES IN_P SCHEMA name_list |
ALL ROUTINES IN_P SCHEMA name_list
grantee_list ::= grantee | grantee_list ',' grantee
grantee ::= RoleSpec | GROUP_P RoleSpec
opt_grant_grant_option ::= WITH GRANT OPTION |
GrantRoleStmt ::= GRANT privilege_list TO role_list
opt_grant_admin_option opt_granted_by
RevokeRoleStmt ::= REVOKE privilege_list FROM role_list opt_granted_by
opt_drop_behavior | REVOKE ADMIN OPTION FOR privilege_list FROM
role_list opt_granted_by opt_drop_behavior
opt_grant_admin_option ::= WITH ADMIN OPTION |
opt_granted_by ::= GRANTED BY RoleSpec |
AlterDefaultPrivilegesStmt ::= ALTER DEFAULT PRIVILEGES DefACLOptionList
DefACLAction
DefACLOptionList ::= DefACLOptionList DefACLOption |
DefACLOption ::= IN_P SCHEMA name_list | FOR ROLE role_list | FOR USER
role_list
DefACLAction ::= GRANT privileges ON defacl_privilege_target TO
grantee_list opt_grant_grant_option | REVOKE privileges ON
defacl_privilege_target FROM grantee_list opt_drop_behavior | REVOKE
GRANT OPTION FOR privileges ON defacl_privilege_target FROM grantee_list
opt_drop_behavior
defacl_privilege_target ::= TABLES | FUNCTIONS | ROUTINES | SEQUENCES |
TYPES_P | SCHEMAS
IndexStmt ::= CREATE opt_unique INDEX opt_concurrently opt_index_name ON
relation_expr access_method_clause '(' index_params ')' opt_include
opt_reloptions OptTableSpace where_clause | CREATE opt_unique INDEX
opt_concurrently IF_P NOT EXISTS index_name ON relation_expr
access_method_clause '(' index_params ')' opt_include opt_reloptions
OptTableSpace where_clause
opt_unique ::= UNIQUE |
opt_concurrently ::= CONCURRENTLY |
opt_index_name ::= index_name |
access_method_clause ::= USING access_method |
index_params ::= index_elem | index_params ',' index_elem
index_elem_options ::= opt_collate opt_class opt_asc_desc
opt_nulls_order | opt_collate any_name reloptions opt_asc_desc
opt_nulls_order
index_elem ::= ColId index_elem_options | func_expr_windowless
index_elem_options | '(' a_expr ')' index_elem_options
opt_include ::= INCLUDE '(' index_including_params ')' |
index_including_params ::= index_elem | index_including_params ','
index_elem
opt_collate ::= COLLATE any_name |
opt_class ::= any_name |
opt_asc_desc ::= ASC | DESC |
opt_nulls_order ::= NULLS_LA FIRST_P | NULLS_LA LAST_P |
CreateFunctionStmt ::= CREATE opt_or_replace FUNCTION func_name
func_args_with_defaults RETURNS func_return createfunc_opt_list | CREATE
opt_or_replace FUNCTION func_name func_args_with_defaults RETURNS TABLE
'(' table_func_column_list ')' createfunc_opt_list | CREATE
opt_or_replace FUNCTION func_name func_args_with_defaults
createfunc_opt_list | CREATE opt_or_replace PROCEDURE func_name
func_args_with_defaults createfunc_opt_list
opt_or_replace ::= OR REPLACE |
func_args ::= '(' func_args_list ')' | '(' ')'
func_args_list ::= func_arg | func_args_list ',' func_arg
function_with_argtypes_list ::= function_with_argtypes |
function_with_argtypes_list ',' function_with_argtypes
function_with_argtypes ::= func_name func_args | type_func_name_keyword
| ColId | ColId indirection
func_args_with_defaults ::= '(' func_args_with_defaults_list ')' | '(' ')'
func_args_with_defaults_list ::= func_arg_with_default |
func_args_with_defaults_list ',' func_arg_with_default
func_arg ::= arg_class param_name func_type | param_name arg_class
func_type | param_name func_type | arg_class func_type | func_type
arg_class ::= IN_P | OUT_P | INOUT | IN_P OUT_P | VARIADIC
param_name ::= type_function_name
func_return ::= func_type
func_type ::= Typename | type_function_name attrs '%' TYPE_P | SETOF
type_function_name attrs '%' TYPE_P
func_arg_with_default ::= func_arg | func_arg DEFAULT a_expr | func_arg
'=' a_expr
aggr_arg ::= func_arg
aggr_args ::= '(' '*' ')' | '(' aggr_args_list ')' | '(' ORDER BY
aggr_args_list ')' | '(' aggr_args_list ORDER BY aggr_args_list ')'
aggr_args_list ::= aggr_arg | aggr_args_list ',' aggr_arg
aggregate_with_argtypes ::= func_name aggr_args
aggregate_with_argtypes_list ::= aggregate_with_argtypes |
aggregate_with_argtypes_list ',' aggregate_with_argtypes
createfunc_opt_list ::= createfunc_opt_item | createfunc_opt_list
createfunc_opt_item
common_func_opt_item ::= CALLED ON NULL_P INPUT_P | RETURNS NULL_P ON
NULL_P INPUT_P | STRICT_P | IMMUTABLE | STABLE | VOLATILE | EXTERNAL
SECURITY DEFINER | EXTERNAL SECURITY INVOKER | SECURITY DEFINER |
SECURITY INVOKER | LEAKPROOF | NOT LEAKPROOF | COST NumericOnly | ROWS
NumericOnly | SUPPORT any_name | FunctionSetResetClause | PARALLEL ColId
createfunc_opt_item ::= AS func_as | LANGUAGE NonReservedWord_or_Sconst
| TRANSFORM transform_type_list | WINDOW | common_func_opt_item
func_as ::= Sconst | Sconst ',' Sconst
transform_type_list ::= FOR TYPE_P Typename | transform_type_list ','
FOR TYPE_P Typename
opt_definition ::= WITH definition |
table_func_column ::= param_name func_type
table_func_column_list ::= table_func_column | table_func_column_list
',' table_func_column
AlterFunctionStmt ::= ALTER FUNCTION function_with_argtypes
alterfunc_opt_list opt_restrict | ALTER PROCEDURE function_with_argtypes
alterfunc_opt_list opt_restrict | ALTER ROUTINE function_with_argtypes
alterfunc_opt_list opt_restrict
alterfunc_opt_list ::= common_func_opt_item | alterfunc_opt_list
common_func_opt_item
opt_restrict ::= RESTRICT | /*empty*/
RemoveFuncStmt ::= DROP FUNCTION function_with_argtypes_list
opt_drop_behavior | DROP FUNCTION IF_P EXISTS
function_with_argtypes_list opt_drop_behavior | DROP PROCEDURE
function_with_argtypes_list opt_drop_behavior | DROP PROCEDURE IF_P
EXISTS function_with_argtypes_list opt_drop_behavior | DROP ROUTINE
function_with_argtypes_list opt_drop_behavior | DROP ROUTINE IF_P EXISTS
function_with_argtypes_list opt_drop_behavior
RemoveAggrStmt ::= DROP AGGREGATE aggregate_with_argtypes_list
opt_drop_behavior | DROP AGGREGATE IF_P EXISTS
aggregate_with_argtypes_list opt_drop_behavior
RemoveOperStmt ::= DROP OPERATOR operator_with_argtypes_list
opt_drop_behavior | DROP OPERATOR IF_P EXISTS
operator_with_argtypes_list opt_drop_behavior
oper_argtypes ::= '(' Typename ')' | '(' Typename ',' Typename ')' | '('
NONE ',' Typename ')' | '(' Typename ',' NONE ')'
any_operator ::= all_Op | ColId '.' any_operator
operator_with_argtypes_list ::= operator_with_argtypes |
operator_with_argtypes_list ',' operator_with_argtypes
operator_with_argtypes ::= any_operator oper_argtypes
DoStmt ::= DO dostmt_opt_list
dostmt_opt_list ::= dostmt_opt_item | dostmt_opt_list dostmt_opt_item
dostmt_opt_item ::= Sconst | LANGUAGE NonReservedWord_or_Sconst
CreateCastStmt ::= CREATE CAST '(' Typename AS Typename ')' WITH
FUNCTION function_with_argtypes cast_context | CREATE CAST '(' Typename
AS Typename ')' WITHOUT FUNCTION cast_context | CREATE CAST '(' Typename
AS Typename ')' WITH INOUT cast_context
cast_context ::= AS IMPLICIT_P | AS ASSIGNMENT |
DropCastStmt ::= DROP CAST opt_if_exists '(' Typename AS Typename ')'
opt_drop_behavior
opt_if_exists ::= IF_P EXISTS |
CreateTransformStmt ::= CREATE opt_or_replace TRANSFORM FOR Typename
LANGUAGE name '(' transform_element_list ')'
transform_element_list ::= FROM SQL_P WITH FUNCTION
function_with_argtypes ',' TO SQL_P WITH FUNCTION function_with_argtypes
| TO SQL_P WITH FUNCTION function_with_argtypes ',' FROM SQL_P WITH
FUNCTION function_with_argtypes | FROM SQL_P WITH FUNCTION
function_with_argtypes | TO SQL_P WITH FUNCTION function_with_argtypes
DropTransformStmt ::= DROP TRANSFORM opt_if_exists FOR Typename LANGUAGE
name opt_drop_behavior
ReindexStmt ::= REINDEX reindex_target_type opt_concurrently
qualified_name | REINDEX reindex_target_multitable opt_concurrently name
| REINDEX '(' reindex_option_list ')' reindex_target_type
opt_concurrently qualified_name | REINDEX '(' reindex_option_list ')'
reindex_target_multitable opt_concurrently name
reindex_target_type ::= INDEX | TABLE
reindex_target_multitable ::= SCHEMA | SYSTEM_P | DATABASE
reindex_option_list ::= reindex_option_elem | reindex_option_list ','
reindex_option_elem
reindex_option_elem ::= VERBOSE
AlterTblSpcStmt ::= ALTER TABLESPACE name SET reloptions | ALTER
TABLESPACE name RESET reloptions
RenameStmt ::= ALTER AGGREGATE aggregate_with_argtypes RENAME TO name |
ALTER COLLATION any_name RENAME TO name | ALTER CONVERSION_P any_name
RENAME TO name | ALTER DATABASE database_name RENAME TO database_name |
ALTER DOMAIN_P any_name RENAME TO name | ALTER DOMAIN_P any_name RENAME
CONSTRAINT name TO name | ALTER FOREIGN DATA_P WRAPPER name RENAME TO
name | ALTER FUNCTION function_with_argtypes RENAME TO name | ALTER
GROUP_P RoleId RENAME TO RoleId | ALTER opt_procedural LANGUAGE name
RENAME TO name | ALTER OPERATOR CLASS any_name USING access_method
RENAME TO name | ALTER OPERATOR FAMILY any_name USING access_method
RENAME TO name | ALTER POLICY name ON qualified_name RENAME TO name |
ALTER POLICY IF_P EXISTS name ON qualified_name RENAME TO name | ALTER
PROCEDURE function_with_argtypes RENAME TO name | ALTER PUBLICATION name
RENAME TO name | ALTER ROUTINE function_with_argtypes RENAME TO name |
ALTER SCHEMA name RENAME TO name | ALTER SERVER name RENAME TO name |
ALTER SUBSCRIPTION name RENAME TO name | ALTER TABLE relation_expr
RENAME TO name | ALTER TABLE IF_P EXISTS relation_expr RENAME TO name |
ALTER SEQUENCE qualified_name RENAME TO name | ALTER SEQUENCE IF_P
EXISTS qualified_name RENAME TO name | ALTER VIEW qualified_name RENAME
TO name | ALTER VIEW IF_P EXISTS qualified_name RENAME TO name | ALTER
MATERIALIZED VIEW qualified_name RENAME TO name | ALTER MATERIALIZED
VIEW IF_P EXISTS qualified_name RENAME TO name | ALTER INDEX
qualified_name RENAME TO name | ALTER INDEX IF_P EXISTS qualified_name
RENAME TO name | ALTER FOREIGN TABLE relation_expr RENAME TO name |
ALTER FOREIGN TABLE IF_P EXISTS relation_expr RENAME TO name | ALTER
TABLE relation_expr RENAME opt_column name TO name | ALTER TABLE IF_P
EXISTS relation_expr RENAME opt_column name TO name | ALTER VIEW
qualified_name RENAME opt_column name TO name | ALTER VIEW IF_P EXISTS
qualified_name RENAME opt_column name TO name | ALTER MATERIALIZED VIEW
qualified_name RENAME opt_column name TO name | ALTER MATERIALIZED VIEW
IF_P EXISTS qualified_name RENAME opt_column name TO name | ALTER TABLE
relation_expr RENAME CONSTRAINT name TO name | ALTER TABLE IF_P EXISTS
relation_expr RENAME CONSTRAINT name TO name | ALTER FOREIGN TABLE
relation_expr RENAME opt_column name TO name | ALTER FOREIGN TABLE IF_P
EXISTS relation_expr RENAME opt_column name TO name | ALTER RULE name ON
qualified_name RENAME TO name | ALTER TRIGGER name ON qualified_name
RENAME TO name | ALTER EVENT TRIGGER name RENAME TO name | ALTER ROLE
RoleId RENAME TO RoleId | ALTER USER RoleId RENAME TO RoleId | ALTER
TABLESPACE name RENAME TO name | ALTER STATISTICS any_name RENAME TO
name | ALTER TEXT_P SEARCH PARSER any_name RENAME TO name | ALTER TEXT_P
SEARCH DICTIONARY any_name RENAME TO name | ALTER TEXT_P SEARCH TEMPLATE
any_name RENAME TO name | ALTER TEXT_P SEARCH CONFIGURATION any_name
RENAME TO name | ALTER TYPE_P any_name RENAME TO name | ALTER TYPE_P
any_name RENAME ATTRIBUTE name TO name opt_drop_behavior
opt_column ::= COLUMN |
opt_set_data ::= SET DATA_P |
AlterObjectDependsStmt ::= ALTER FUNCTION function_with_argtypes opt_no
DEPENDS ON EXTENSION name | ALTER PROCEDURE function_with_argtypes
opt_no DEPENDS ON EXTENSION name | ALTER ROUTINE function_with_argtypes
opt_no DEPENDS ON EXTENSION name | ALTER TRIGGER name ON qualified_name
opt_no DEPENDS ON EXTENSION name | ALTER MATERIALIZED VIEW
qualified_name opt_no DEPENDS ON EXTENSION name | ALTER INDEX
qualified_name opt_no DEPENDS ON EXTENSION name
opt_no ::= NO |
AlterObjectSchemaStmt ::= ALTER AGGREGATE aggregate_with_argtypes SET
SCHEMA name | ALTER COLLATION any_name SET SCHEMA name | ALTER
CONVERSION_P any_name SET SCHEMA name | ALTER DOMAIN_P any_name SET
SCHEMA name | ALTER EXTENSION name SET SCHEMA name | ALTER FUNCTION
function_with_argtypes SET SCHEMA name | ALTER OPERATOR
operator_with_argtypes SET SCHEMA name | ALTER OPERATOR CLASS any_name
USING access_method SET SCHEMA name | ALTER OPERATOR FAMILY any_name
USING access_method SET SCHEMA name | ALTER PROCEDURE
function_with_argtypes SET SCHEMA name | ALTER ROUTINE
function_with_argtypes SET SCHEMA name | ALTER TABLE relation_expr SET
SCHEMA name | ALTER TABLE IF_P EXISTS relation_expr SET SCHEMA name |
ALTER STATISTICS any_name SET SCHEMA name | ALTER TEXT_P SEARCH PARSER
any_name SET SCHEMA name | ALTER TEXT_P SEARCH DICTIONARY any_name SET
SCHEMA name | ALTER TEXT_P SEARCH TEMPLATE any_name SET SCHEMA name |
ALTER TEXT_P SEARCH CONFIGURATION any_name SET SCHEMA name | ALTER
SEQUENCE qualified_name SET SCHEMA name | ALTER SEQUENCE IF_P EXISTS
qualified_name SET SCHEMA name | ALTER VIEW qualified_name SET SCHEMA
name | ALTER VIEW IF_P EXISTS qualified_name SET SCHEMA name | ALTER
MATERIALIZED VIEW qualified_name SET SCHEMA name | ALTER MATERIALIZED
VIEW IF_P EXISTS qualified_name SET SCHEMA name | ALTER FOREIGN TABLE
relation_expr SET SCHEMA name | ALTER FOREIGN TABLE IF_P EXISTS
relation_expr SET SCHEMA name | ALTER TYPE_P any_name SET SCHEMA name
AlterOperatorStmt ::= ALTER OPERATOR operator_with_argtypes SET '('
operator_def_list ')'
operator_def_list ::= operator_def_elem | operator_def_list ','
operator_def_elem
operator_def_elem ::= ColLabel '=' NONE | ColLabel '=' operator_def_arg
operator_def_arg ::= func_type | reserved_keyword | qual_all_Op |
NumericOnly | Sconst
AlterTypeStmt ::= ALTER TYPE_P any_name SET '(' operator_def_list ')'
AlterOwnerStmt ::= ALTER AGGREGATE aggregate_with_argtypes OWNER TO
RoleSpec | ALTER COLLATION any_name OWNER TO RoleSpec | ALTER
CONVERSION_P any_name OWNER TO RoleSpec | ALTER DATABASE database_name
OWNER TO RoleSpec | ALTER DOMAIN_P any_name OWNER TO RoleSpec | ALTER
FUNCTION function_with_argtypes OWNER TO RoleSpec | ALTER opt_procedural
LANGUAGE name OWNER TO RoleSpec | ALTER LARGE_P OBJECT_P NumericOnly
OWNER TO RoleSpec | ALTER OPERATOR operator_with_argtypes OWNER TO
RoleSpec | ALTER OPERATOR CLASS any_name USING access_method OWNER TO
RoleSpec | ALTER OPERATOR FAMILY any_name USING access_method OWNER TO
RoleSpec | ALTER PROCEDURE function_with_argtypes OWNER TO RoleSpec |
ALTER ROUTINE function_with_argtypes OWNER TO RoleSpec | ALTER SCHEMA
name OWNER TO RoleSpec | ALTER TYPE_P any_name OWNER TO RoleSpec | ALTER
TABLESPACE name OWNER TO RoleSpec | ALTER STATISTICS any_name OWNER TO
RoleSpec | ALTER TEXT_P SEARCH DICTIONARY any_name OWNER TO RoleSpec |
ALTER TEXT_P SEARCH CONFIGURATION any_name OWNER TO RoleSpec | ALTER
FOREIGN DATA_P WRAPPER name OWNER TO RoleSpec | ALTER SERVER name OWNER
TO RoleSpec | ALTER EVENT TRIGGER name OWNER TO RoleSpec | ALTER
PUBLICATION name OWNER TO RoleSpec | ALTER SUBSCRIPTION name OWNER TO
RoleSpec
CreatePublicationStmt ::= CREATE PUBLICATION name
opt_publication_for_tables opt_definition
opt_publication_for_tables ::= publication_for_tables |
publication_for_tables ::= FOR TABLE relation_expr_list | FOR ALL TABLES
AlterPublicationStmt ::= ALTER PUBLICATION name SET definition | ALTER
PUBLICATION name ADD_P TABLE relation_expr_list | ALTER PUBLICATION name
SET TABLE relation_expr_list | ALTER PUBLICATION name DROP TABLE
relation_expr_list
CreateSubscriptionStmt ::= CREATE SUBSCRIPTION name CONNECTION Sconst
PUBLICATION publication_name_list opt_definition
publication_name_list ::= publication_name_item | publication_name_list
',' publication_name_item
publication_name_item ::= ColLabel
AlterSubscriptionStmt ::= ALTER SUBSCRIPTION name SET definition | ALTER
SUBSCRIPTION name CONNECTION Sconst | ALTER SUBSCRIPTION name REFRESH
PUBLICATION opt_definition | ALTER SUBSCRIPTION name SET PUBLICATION
publication_name_list opt_definition | ALTER SUBSCRIPTION name ENABLE_P
| ALTER SUBSCRIPTION name DISABLE_P
DropSubscriptionStmt ::= DROP SUBSCRIPTION name opt_drop_behavior | DROP
SUBSCRIPTION IF_P EXISTS name opt_drop_behavior
RuleStmt ::= CREATE opt_or_replace RULE name AS ON event TO
qualified_name where_clause DO opt_instead RuleActionList
RuleActionList ::= NOTHING | RuleActionStmt | '(' RuleActionMulti ')'
RuleActionMulti ::= RuleActionMulti ';' RuleActionStmtOrEmpty |
RuleActionStmtOrEmpty
RuleActionStmt ::= SelectStmt | InsertStmt | UpdateStmt | DeleteStmt |
NotifyStmt
RuleActionStmtOrEmpty ::= RuleActionStmt |
event ::= SELECT | UPDATE | DELETE_P | INSERT
opt_instead ::= INSTEAD | ALSO |
NotifyStmt ::= NOTIFY ColId notify_payload
notify_payload ::= ',' Sconst |
ListenStmt ::= LISTEN ColId
UnlistenStmt ::= UNLISTEN ColId | UNLISTEN '*'
TransactionStmt ::= ABORT_P opt_transaction opt_transaction_chain |
BEGIN_P opt_transaction transaction_mode_list_or_empty | START
TRANSACTION transaction_mode_list_or_empty | COMMIT opt_transaction
opt_transaction_chain | END_P opt_transaction opt_transaction_chain |
ROLLBACK opt_transaction opt_transaction_chain | SAVEPOINT ColId |
RELEASE SAVEPOINT ColId | RELEASE ColId | ROLLBACK opt_transaction TO
SAVEPOINT ColId | ROLLBACK opt_transaction TO ColId | PREPARE
TRANSACTION Sconst | COMMIT PREPARED Sconst | ROLLBACK PREPARED Sconst
opt_transaction ::= WORK | TRANSACTION |
transaction_mode_item ::= ISOLATION LEVEL iso_level | READ ONLY | READ
WRITE | DEFERRABLE | NOT DEFERRABLE
transaction_mode_list ::= transaction_mode_item | transaction_mode_list
',' transaction_mode_item | transaction_mode_list transaction_mode_item
transaction_mode_list_or_empty ::= transaction_mode_list |
opt_transaction_chain ::= AND CHAIN | AND NO CHAIN |
ViewStmt ::= CREATE OptTemp VIEW qualified_name opt_column_list
opt_reloptions AS SelectStmt opt_check_option | CREATE OR REPLACE
OptTemp VIEW qualified_name opt_column_list opt_reloptions AS SelectStmt
opt_check_option | CREATE OptTemp RECURSIVE VIEW qualified_name '('
columnList ')' opt_reloptions AS SelectStmt opt_check_option | CREATE OR
REPLACE OptTemp RECURSIVE VIEW qualified_name '(' columnList ')'
opt_reloptions AS SelectStmt opt_check_option
opt_check_option ::= WITH CHECK OPTION | WITH CASCADED CHECK OPTION |
WITH LOCAL CHECK OPTION |
LoadStmt ::= LOAD file_name
CreatedbStmt ::= CREATE DATABASE database_name opt_with createdb_opt_list
createdb_opt_list ::= createdb_opt_items |
createdb_opt_items ::= createdb_opt_item | createdb_opt_items
createdb_opt_item
createdb_opt_item ::= createdb_opt_name opt_equal SignedIconst |
createdb_opt_name opt_equal opt_boolean_or_string | createdb_opt_name
opt_equal DEFAULT
createdb_opt_name ::= IDENT | CONNECTION LIMIT | ENCODING | LOCATION |
OWNER | TABLESPACE | TEMPLATE
opt_equal ::= '=' |
AlterDatabaseStmt ::= ALTER DATABASE database_name WITH
createdb_opt_list | ALTER DATABASE database_name createdb_opt_list |
ALTER DATABASE database_name SET TABLESPACE name
AlterDatabaseSetStmt ::= ALTER DATABASE database_name SetResetClause
DropdbStmt ::= DROP DATABASE database_name | DROP DATABASE IF_P EXISTS
database_name | DROP DATABASE database_name opt_with '('
drop_option_list ')' | DROP DATABASE IF_P EXISTS database_name opt_with
'(' drop_option_list ')'
drop_option_list ::= drop_option | drop_option_list ',' drop_option
drop_option ::= FORCE
AlterCollationStmt ::= ALTER COLLATION any_name REFRESH VERSION_P
AlterSystemStmt ::= ALTER SYSTEM_P SET generic_set | ALTER SYSTEM_P
RESET generic_reset
CreateDomainStmt ::= CREATE DOMAIN_P any_name opt_as Typename ColQualList
AlterDomainStmt ::= ALTER DOMAIN_P any_name alter_column_default | ALTER
DOMAIN_P any_name DROP NOT NULL_P | ALTER DOMAIN_P any_name SET NOT
NULL_P | ALTER DOMAIN_P any_name ADD_P TableConstraint | ALTER DOMAIN_P
any_name DROP CONSTRAINT name opt_drop_behavior | ALTER DOMAIN_P
any_name DROP CONSTRAINT IF_P EXISTS name opt_drop_behavior | ALTER
DOMAIN_P any_name VALIDATE CONSTRAINT name
opt_as ::= AS |
AlterTSDictionaryStmt ::= ALTER TEXT_P SEARCH DICTIONARY any_name definition
AlterTSConfigurationStmt ::= ALTER TEXT_P SEARCH CONFIGURATION any_name
ADD_P MAPPING FOR name_list any_with any_name_list | ALTER TEXT_P SEARCH
CONFIGURATION any_name ALTER MAPPING FOR name_list any_with
any_name_list | ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING
REPLACE any_name any_with any_name | ALTER TEXT_P SEARCH CONFIGURATION
any_name ALTER MAPPING FOR name_list REPLACE any_name any_with any_name
| ALTER TEXT_P SEARCH CONFIGURATION any_name DROP MAPPING FOR name_list
| ALTER TEXT_P SEARCH CONFIGURATION any_name DROP MAPPING IF_P EXISTS
FOR name_list
any_with ::= WITH | WITH_LA
CreateConversionStmt ::= CREATE opt_default CONVERSION_P any_name FOR
Sconst TO Sconst FROM any_name
ClusterStmt ::= CLUSTER opt_verbose qualified_name
cluster_index_specification | CLUSTER opt_verbose | CLUSTER opt_verbose
index_name ON qualified_name
cluster_index_specification ::= USING index_name |
VacuumStmt ::= VACUUM opt_full opt_freeze opt_verbose opt_analyze
opt_vacuum_relation_list | VACUUM '(' vac_analyze_option_list ')'
opt_vacuum_relation_list
AnalyzeStmt ::= analyze_keyword opt_verbose opt_vacuum_relation_list |
analyze_keyword '(' vac_analyze_option_list ')' opt_vacuum_relation_list
vac_analyze_option_list ::= vac_analyze_option_elem |
vac_analyze_option_list ',' vac_analyze_option_elem
analyze_keyword ::= ANALYZE | ANALYSE
vac_analyze_option_elem ::= vac_analyze_option_name vac_analyze_option_arg
vac_analyze_option_name ::= NonReservedWord | analyze_keyword
vac_analyze_option_arg ::= opt_boolean_or_string | NumericOnly |
opt_analyze ::= analyze_keyword |
opt_verbose ::= VERBOSE |
opt_full ::= FULL |
opt_freeze ::= FREEZE |
opt_name_list ::= '(' name_list ')' |
vacuum_relation ::= qualified_name opt_name_list
vacuum_relation_list ::= vacuum_relation | vacuum_relation_list ','
vacuum_relation
opt_vacuum_relation_list ::= vacuum_relation_list |
ExplainStmt ::= EXPLAIN ExplainableStmt | EXPLAIN analyze_keyword
opt_verbose ExplainableStmt | EXPLAIN VERBOSE ExplainableStmt | EXPLAIN
'(' explain_option_list ')' ExplainableStmt
ExplainableStmt ::= SelectStmt | InsertStmt | UpdateStmt | DeleteStmt |
DeclareCursorStmt | CreateAsStmt | CreateMatViewStmt |
RefreshMatViewStmt | ExecuteStmt
explain_option_list ::= explain_option_elem | explain_option_list ','
explain_option_elem
explain_option_elem ::= explain_option_name explain_option_arg
explain_option_name ::= NonReservedWord | analyze_keyword
explain_option_arg ::= opt_boolean_or_string | NumericOnly |
PrepareStmt ::= PREPARE name prep_type_clause AS PreparableStmt
prep_type_clause ::= '(' type_list ')' |
PreparableStmt ::= SelectStmt | InsertStmt | UpdateStmt | DeleteStmt
ExecuteStmt ::= EXECUTE name execute_param_clause | CREATE OptTemp TABLE
create_as_target AS EXECUTE name execute_param_clause opt_with_data |
CREATE OptTemp TABLE IF_P NOT EXISTS create_as_target AS EXECUTE name
execute_param_clause opt_with_data
execute_param_clause ::= '(' expr_list ')' |
DeallocateStmt ::= DEALLOCATE name | DEALLOCATE PREPARE name |
DEALLOCATE ALL | DEALLOCATE PREPARE ALL
InsertStmt ::= opt_with_clause INSERT INTO insert_target insert_rest
opt_on_conflict returning_clause
insert_target ::= qualified_name | qualified_name AS ColId
insert_rest ::= SelectStmt | OVERRIDING override_kind VALUE_P SelectStmt
| '(' insert_column_list ')' SelectStmt | '(' insert_column_list ')'
OVERRIDING override_kind VALUE_P SelectStmt | DEFAULT VALUES
override_kind ::= USER | SYSTEM_P
insert_column_list ::= insert_column_item | insert_column_list ','
insert_column_item
insert_column_item ::= ColId opt_indirection
opt_on_conflict ::= ON CONFLICT opt_conf_expr DO UPDATE SET
set_clause_list where_clause | ON CONFLICT opt_conf_expr DO NOTHING |
opt_conf_expr ::= '(' index_params ')' where_clause | ON CONSTRAINT name |
returning_clause ::= RETURNING target_list |
DeleteStmt ::= opt_with_clause DELETE_P FROM relation_expr_opt_alias
using_clause where_or_current_clause returning_clause
using_clause ::= USING from_list |
LockStmt ::= LOCK_P opt_table relation_expr_list opt_lock opt_nowait
opt_lock ::= IN_P lock_type MODE |
lock_type ::= ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE
EXCLUSIVE | SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE
opt_nowait ::= NOWAIT |
opt_nowait_or_skip ::= NOWAIT | SKIP LOCKED |
UpdateStmt ::= opt_with_clause UPDATE relation_expr_opt_alias SET
set_clause_list from_clause where_or_current_clause returning_clause
set_clause_list ::= set_clause | set_clause_list ',' set_clause
set_clause ::= set_target '=' a_expr | '(' set_target_list ')' '=' a_expr
set_target ::= ColId opt_indirection
set_target_list ::= set_target | set_target_list ',' set_target
DeclareCursorStmt ::= DECLARE cursor_name cursor_options CURSOR opt_hold
FOR SelectStmt
cursor_name ::= name
cursor_options ::= | cursor_options NO SCROLL | cursor_options SCROLL |
cursor_options BINARY | cursor_options INSENSITIVE
opt_hold ::= | WITH HOLD | WITHOUT HOLD
SelectStmt ::= select_no_parens | select_with_parens
select_with_parens ::= '(' select_no_parens ')' | '(' select_with_parens ')'
select_no_parens ::= simple_select | select_clause sort_clause |
select_clause opt_sort_clause for_locking_clause opt_select_limit |
select_clause opt_sort_clause select_limit opt_for_locking_clause |
with_clause select_clause | with_clause select_clause sort_clause |
with_clause select_clause opt_sort_clause for_locking_clause
opt_select_limit | with_clause select_clause opt_sort_clause
select_limit opt_for_locking_clause
select_clause ::= simple_select | select_with_parens
simple_select ::= SELECT opt_all_clause opt_target_list into_clause
from_clause where_clause group_clause having_clause window_clause |
SELECT distinct_clause target_list into_clause from_clause where_clause
group_clause having_clause window_clause | values_clause | TABLE
relation_expr | select_clause UNION all_or_distinct select_clause |
select_clause INTERSECT all_or_distinct select_clause | select_clause
EXCEPT all_or_distinct select_clause
with_clause ::= WITH cte_list | WITH_LA cte_list | WITH RECURSIVE cte_list
cte_list ::= common_table_expr | cte_list ',' common_table_expr
common_table_expr ::= name opt_name_list AS opt_materialized '('
PreparableStmt ')'
opt_materialized ::= MATERIALIZED | NOT MATERIALIZED |
opt_with_clause ::= with_clause |
into_clause ::= INTO OptTempTableName |
OptTempTableName ::= TEMPORARY opt_table qualified_name | TEMP opt_table
qualified_name | LOCAL TEMPORARY opt_table qualified_name | LOCAL TEMP
opt_table qualified_name | GLOBAL TEMPORARY opt_table qualified_name |
GLOBAL TEMP opt_table qualified_name | UNLOGGED opt_table qualified_name
| TABLE qualified_name | qualified_name
opt_table ::= TABLE |
all_or_distinct ::= ALL | DISTINCT |
distinct_clause ::= DISTINCT | DISTINCT ON '(' expr_list ')'
opt_all_clause ::= ALL |
opt_sort_clause ::= sort_clause |
sort_clause ::= ORDER BY sortby_list
sortby_list ::= sortby | sortby_list ',' sortby
sortby ::= a_expr USING qual_all_Op opt_nulls_order | a_expr
opt_asc_desc opt_nulls_order
select_limit ::= limit_clause offset_clause | offset_clause limit_clause
| limit_clause | offset_clause
opt_select_limit ::= select_limit |
limit_clause ::= LIMIT select_limit_value | LIMIT select_limit_value ','
select_offset_value | FETCH first_or_next select_fetch_first_value
row_or_rows ONLY | FETCH first_or_next select_fetch_first_value
row_or_rows WITH TIES | FETCH first_or_next row_or_rows ONLY | FETCH
first_or_next row_or_rows WITH TIES
offset_clause ::= OFFSET select_offset_value | OFFSET
select_fetch_first_value row_or_rows
select_limit_value ::= a_expr | ALL
select_offset_value ::= a_expr
select_fetch_first_value ::= c_expr | '+' I_or_F_const | '-' I_or_F_const
I_or_F_const ::= Iconst | FCONST
row_or_rows ::= ROW | ROWS
first_or_next ::= FIRST_P | NEXT
group_clause ::= GROUP_P BY group_by_list |
group_by_list ::= group_by_item | group_by_list ',' group_by_item
group_by_item ::= a_expr | empty_grouping_set | cube_clause |
rollup_clause | grouping_sets_clause
empty_grouping_set ::= '(' ')'
rollup_clause ::= ROLLUP '(' expr_list ')'
cube_clause ::= CUBE '(' expr_list ')'
grouping_sets_clause ::= GROUPING SETS '(' group_by_list ')'
having_clause ::= HAVING a_expr |
for_locking_clause ::= for_locking_items | FOR READ ONLY
opt_for_locking_clause ::= for_locking_clause |
for_locking_items ::= for_locking_item | for_locking_items for_locking_item
for_locking_item ::= for_locking_strength locked_rels_list
opt_nowait_or_skip
for_locking_strength ::= FOR UPDATE | FOR NO KEY UPDATE | FOR SHARE |
FOR KEY SHARE
locked_rels_list ::= OF qualified_name_list |
values_clause ::= VALUES '(' expr_list ')' | values_clause ',' '('
expr_list ')'
from_clause ::= FROM from_list |
from_list ::= table_ref | from_list ',' table_ref
table_ref ::= relation_expr opt_alias_clause | relation_expr
opt_alias_clause tablesample_clause | func_table func_alias_clause |
LATERAL_P func_table func_alias_clause | xmltable opt_alias_clause |
LATERAL_P xmltable opt_alias_clause | select_with_parens
opt_alias_clause | LATERAL_P select_with_parens opt_alias_clause |
joined_table | '(' joined_table ')' alias_clause
joined_table ::= '(' joined_table ')' | table_ref CROSS JOIN table_ref |
table_ref join_type JOIN table_ref join_qual | table_ref JOIN table_ref
join_qual | table_ref NATURAL join_type JOIN table_ref | table_ref
NATURAL JOIN table_ref
alias_clause ::= AS ColId '(' name_list ')' | AS ColId | ColId '('
name_list ')' | ColId
opt_alias_clause ::= alias_clause |
func_alias_clause ::= alias_clause | AS '(' TableFuncElementList ')' |
AS ColId '(' TableFuncElementList ')' | ColId '(' TableFuncElementList ')' |
join_type ::= FULL join_outer | LEFT join_outer | RIGHT join_outer | INNER_P
join_outer ::= OUTER_P |
join_qual ::= USING '(' name_list ')' | ON a_expr
relation_expr ::= qualified_name | qualified_name '*' | ONLY
qualified_name | ONLY '(' qualified_name ')'
relation_expr_list ::= relation_expr | relation_expr_list ',' relation_expr
relation_expr_opt_alias ::= relation_expr | relation_expr ColId |
relation_expr AS ColId
tablesample_clause ::= TABLESAMPLE func_name '(' expr_list ')'
opt_repeatable_clause
opt_repeatable_clause ::= REPEATABLE '(' a_expr ')' |
func_table ::= func_expr_windowless opt_ordinality | ROWS FROM '('
rowsfrom_list ')' opt_ordinality
rowsfrom_item ::= func_expr_windowless opt_col_def_list
rowsfrom_list ::= rowsfrom_item | rowsfrom_list ',' rowsfrom_item
opt_col_def_list ::= AS '(' TableFuncElementList ')' |
opt_ordinality ::= WITH_LA ORDINALITY |
where_clause ::= WHERE a_expr |
where_or_current_clause ::= WHERE a_expr | WHERE CURRENT_P OF cursor_name |
OptTableFuncElementList ::= TableFuncElementList |
TableFuncElementList ::= TableFuncElement | TableFuncElementList ','
TableFuncElement
TableFuncElement ::= ColId Typename opt_collate_clause
xmltable ::= XMLTABLE '(' c_expr xmlexists_argument COLUMNS
xmltable_column_list ')' | XMLTABLE '(' XMLNAMESPACES '('
xml_namespace_list ')' ',' c_expr xmlexists_argument COLUMNS
xmltable_column_list ')'
xmltable_column_list ::= xmltable_column_el | xmltable_column_list ','
xmltable_column_el
xmltable_column_el ::= ColId Typename | ColId Typename
xmltable_column_option_list | ColId FOR ORDINALITY
xmltable_column_option_list ::= xmltable_column_option_el |
xmltable_column_option_list xmltable_column_option_el
xmltable_column_option_el ::= IDENT b_expr | DEFAULT b_expr | NOT NULL_P
| NULL_P
xml_namespace_list ::= xml_namespace_el | xml_namespace_list ','
xml_namespace_el
xml_namespace_el ::= b_expr AS ColLabel | DEFAULT b_expr
Typename ::= SimpleTypename opt_array_bounds | SETOF SimpleTypename
opt_array_bounds | SimpleTypename ARRAY '[' Iconst ']' | SETOF
SimpleTypename ARRAY '[' Iconst ']' | SimpleTypename ARRAY | SETOF
SimpleTypename ARRAY
opt_array_bounds ::= opt_array_bounds '[' ']' | opt_array_bounds '['
Iconst ']' |
SimpleTypename ::= GenericType | Numeric | Bit | Character |
ConstDatetime | ConstInterval opt_interval | ConstInterval '(' Iconst ')'
ConstTypename ::= Numeric | ConstBit | ConstCharacter | ConstDatetime
GenericType ::= type_function_name opt_type_modifiers |
type_function_name attrs opt_type_modifiers
opt_type_modifiers ::= '(' expr_list ')' |
Numeric ::= INT_P | INTEGER | SMALLINT | BIGINT | REAL | FLOAT_P
opt_float | DOUBLE_P PRECISION | DECIMAL_P opt_type_modifiers | DEC
opt_type_modifiers | NUMERIC opt_type_modifiers | BOOLEAN_P
opt_float ::= '(' Iconst ')' |
Bit ::= BitWithLength | BitWithoutLength
ConstBit ::= BitWithLength | BitWithoutLength
BitWithLength ::= BIT opt_varying '(' expr_list ')'
BitWithoutLength ::= BIT opt_varying
Character ::= CharacterWithLength | CharacterWithoutLength
ConstCharacter ::= CharacterWithLength | CharacterWithoutLength
CharacterWithLength ::= character '(' Iconst ')'
CharacterWithoutLength ::= character
character ::= CHARACTER opt_varying | CHAR_P opt_varying | VARCHAR |
NATIONAL CHARACTER opt_varying | NATIONAL CHAR_P opt_varying | NCHAR
opt_varying
opt_varying ::= VARYING |
ConstDatetime ::= TIMESTAMP '(' Iconst ')' opt_timezone | TIMESTAMP
opt_timezone | TIME '(' Iconst ')' opt_timezone | TIME opt_timezone
ConstInterval ::= INTERVAL
opt_timezone ::= WITH_LA TIME ZONE | WITHOUT TIME ZONE |
opt_interval ::= YEAR_P | MONTH_P | DAY_P | HOUR_P | MINUTE_P |
interval_second | YEAR_P TO MONTH_P | DAY_P TO HOUR_P | DAY_P TO
MINUTE_P | DAY_P TO interval_second | HOUR_P TO MINUTE_P | HOUR_P TO
interval_second | MINUTE_P TO interval_second |
interval_second ::= SECOND_P | SECOND_P '(' Iconst ')'
a_expr ::= c_expr | a_expr TYPECAST Typename | a_expr COLLATE any_name |
a_expr AT TIME ZONE a_expr | '+' a_expr | '-' a_expr | a_expr '+' a_expr
| a_expr '-' a_expr | a_expr '*' a_expr | a_expr '/' a_expr | a_expr '%'
a_expr | a_expr '^' a_expr | a_expr '<' a_expr | a_expr '>' a_expr |
a_expr '=' a_expr | a_expr LESS_EQUALS a_expr | a_expr GREATER_EQUALS
a_expr | a_expr NOT_EQUALS a_expr | a_expr qual_Op a_expr | qual_Op
a_expr | a_expr qual_Op | a_expr AND a_expr | a_expr OR a_expr | NOT
a_expr | NOT_LA a_expr | a_expr LIKE a_expr | a_expr LIKE a_expr ESCAPE
a_expr | a_expr NOT_LA LIKE a_expr | a_expr NOT_LA LIKE a_expr ESCAPE
a_expr | a_expr ILIKE a_expr | a_expr ILIKE a_expr ESCAPE a_expr |
a_expr NOT_LA ILIKE a_expr | a_expr NOT_LA ILIKE a_expr ESCAPE a_expr |
a_expr SIMILAR TO a_expr | a_expr SIMILAR TO a_expr ESCAPE a_expr |
a_expr NOT_LA SIMILAR TO a_expr | a_expr NOT_LA SIMILAR TO a_expr ESCAPE
a_expr | a_expr IS NULL_P | a_expr ISNULL | a_expr IS NOT NULL_P |
a_expr NOTNULL | row OVERLAPS row | a_expr IS TRUE_P | a_expr IS NOT
TRUE_P | a_expr IS FALSE_P | a_expr IS NOT FALSE_P | a_expr IS UNKNOWN |
a_expr IS NOT UNKNOWN | a_expr IS DISTINCT FROM a_expr | a_expr IS NOT
DISTINCT FROM a_expr | a_expr IS OF '(' type_list ')' | a_expr IS NOT OF
'(' type_list ')' | a_expr BETWEEN opt_asymmetric b_expr AND a_expr |
a_expr NOT_LA BETWEEN opt_asymmetric b_expr AND a_expr | a_expr BETWEEN
SYMMETRIC b_expr AND a_expr | a_expr NOT_LA BETWEEN SYMMETRIC b_expr AND
a_expr | a_expr IN_P in_expr | a_expr NOT_LA IN_P in_expr | a_expr
subquery_Op sub_type select_with_parens | a_expr subquery_Op sub_type
'(' a_expr ')' | UNIQUE select_with_parens | a_expr IS DOCUMENT_P |
a_expr IS NOT DOCUMENT_P | a_expr IS NORMALIZED | a_expr IS
unicode_normal_form NORMALIZED | a_expr IS NOT NORMALIZED | a_expr IS
NOT unicode_normal_form NORMALIZED | DEFAULT
b_expr ::= c_expr | b_expr TYPECAST Typename | '+' b_expr | '-' b_expr |
b_expr '+' b_expr | b_expr '-' b_expr | b_expr '*' b_expr | b_expr '/'
b_expr | b_expr '%' b_expr | b_expr '^' b_expr | b_expr '<' b_expr |
b_expr '>' b_expr | b_expr '=' b_expr | b_expr LESS_EQUALS b_expr |
b_expr GREATER_EQUALS b_expr | b_expr NOT_EQUALS b_expr | b_expr qual_Op
b_expr | qual_Op b_expr | b_expr qual_Op | b_expr IS DISTINCT FROM
b_expr | b_expr IS NOT DISTINCT FROM b_expr | b_expr IS OF '(' type_list
')' | b_expr IS NOT OF '(' type_list ')' | b_expr IS DOCUMENT_P | b_expr
IS NOT DOCUMENT_P
c_expr ::= columnref | AexprConst | PARAM opt_indirection | '(' a_expr
')' opt_indirection | case_expr | func_expr | select_with_parens |
select_with_parens indirection | EXISTS select_with_parens | ARRAY
select_with_parens | ARRAY array_expr | explicit_row | implicit_row |
GROUPING '(' expr_list ')'
func_application ::= func_name '(' ')' | func_name '(' func_arg_list
opt_sort_clause ')' | func_name '(' VARIADIC func_arg_expr
opt_sort_clause ')' | func_name '(' func_arg_list ',' VARIADIC
func_arg_expr opt_sort_clause ')' | func_name '(' ALL func_arg_list
opt_sort_clause ')' | func_name '(' DISTINCT func_arg_list
opt_sort_clause ')' | func_name '(' '*' ')'
func_expr ::= func_application within_group_clause filter_clause
over_clause | func_expr_common_subexpr
func_expr_windowless ::= func_application | func_expr_common_subexpr
func_expr_common_subexpr ::= COLLATION FOR '(' a_expr ')' | CURRENT_DATE
| CURRENT_TIME | CURRENT_TIME '(' Iconst ')' | CURRENT_TIMESTAMP |
CURRENT_TIMESTAMP '(' Iconst ')' | LOCALTIME | LOCALTIME '(' Iconst ')'
| LOCALTIMESTAMP | LOCALTIMESTAMP '(' Iconst ')' | CURRENT_ROLE |
CURRENT_USER | SESSION_USER | USER | CURRENT_CATALOG | CURRENT_SCHEMA |
CAST '(' a_expr AS Typename ')' | EXTRACT '(' extract_list ')' |
NORMALIZE '(' a_expr ')' | NORMALIZE '(' a_expr ',' unicode_normal_form
')' | OVERLAY '(' overlay_list ')' | POSITION '(' position_list ')' |
SUBSTRING '(' substr_list ')' | TREAT '(' a_expr AS Typename ')' | TRIM
'(' BOTH trim_list ')' | TRIM '(' LEADING trim_list ')' | TRIM '('
TRAILING trim_list ')' | TRIM '(' trim_list ')' | NULLIF '(' a_expr ','
a_expr ')' | COALESCE '(' expr_list ')' | GREATEST '(' expr_list ')' |
LEAST '(' expr_list ')' | XMLCONCAT '(' expr_list ')' | XMLELEMENT '('
NAME_P ColLabel ')' | XMLELEMENT '(' NAME_P ColLabel ',' xml_attributes
')' | XMLELEMENT '(' NAME_P ColLabel ',' expr_list ')' | XMLELEMENT '('
NAME_P ColLabel ',' xml_attributes ',' expr_list ')' | XMLEXISTS '('
c_expr xmlexists_argument ')' | XMLFOREST '(' xml_attribute_list ')' |
XMLPARSE '(' document_or_content a_expr xml_whitespace_option ')' |
XMLPI '(' NAME_P ColLabel ')' | XMLPI '(' NAME_P ColLabel ',' a_expr ')'
| XMLROOT '(' a_expr ',' xml_root_version opt_xml_root_standalone ')' |
XMLSERIALIZE '(' document_or_content a_expr AS SimpleTypename ')'
xml_root_version ::= VERSION_P a_expr | VERSION_P NO VALUE_P
opt_xml_root_standalone ::= ',' STANDALONE_P YES_P | ',' STANDALONE_P NO
| ',' STANDALONE_P NO VALUE_P |
xml_attributes ::= XMLATTRIBUTES '(' xml_attribute_list ')'
xml_attribute_list ::= xml_attribute_el | xml_attribute_list ','
xml_attribute_el
xml_attribute_el ::= a_expr AS ColLabel | a_expr
document_or_content ::= DOCUMENT_P | CONTENT_P
xml_whitespace_option ::= PRESERVE WHITESPACE_P | STRIP_P WHITESPACE_P |
xmlexists_argument ::= PASSING c_expr | PASSING c_expr xml_passing_mech
| PASSING xml_passing_mech c_expr | PASSING xml_passing_mech c_expr
xml_passing_mech
xml_passing_mech ::= BY REF | BY VALUE_P
within_group_clause ::= WITHIN GROUP_P '(' sort_clause ')' |
filter_clause ::= FILTER '(' WHERE a_expr ')' |
window_clause ::= WINDOW window_definition_list |
window_definition_list ::= window_definition | window_definition_list
',' window_definition
window_definition ::= ColId AS window_specification
over_clause ::= OVER window_specification | OVER ColId |
window_specification ::= '(' opt_existing_window_name
opt_partition_clause opt_sort_clause opt_frame_clause ')'
opt_existing_window_name ::= ColId |
opt_partition_clause ::= PARTITION BY expr_list |
opt_frame_clause ::= RANGE frame_extent opt_window_exclusion_clause |
ROWS frame_extent opt_window_exclusion_clause | GROUPS frame_extent
opt_window_exclusion_clause |
frame_extent ::= frame_bound | BETWEEN frame_bound AND frame_bound
frame_bound ::= UNBOUNDED PRECEDING | UNBOUNDED FOLLOWING | CURRENT_P
ROW | a_expr PRECEDING | a_expr FOLLOWING
opt_window_exclusion_clause ::= EXCLUDE CURRENT_P ROW | EXCLUDE GROUP_P
| EXCLUDE TIES | EXCLUDE NO OTHERS |
row ::= ROW '(' expr_list ')' | ROW '(' ')' | '(' expr_list ',' a_expr ')'
explicit_row ::= ROW '(' expr_list ')' | ROW '(' ')'
implicit_row ::= '(' expr_list ',' a_expr ')'
sub_type ::= ANY | SOME | ALL
all_Op ::= Op | MathOp
MathOp ::= '+' | '-' | '*' | '/' | '%' | '^' | '<' | '>' | '=' |
LESS_EQUALS | GREATER_EQUALS | NOT_EQUALS
qual_Op ::= Op | OPERATOR '(' any_operator ')'
qual_all_Op ::= all_Op | OPERATOR '(' any_operator ')'
subquery_Op ::= all_Op | OPERATOR '(' any_operator ')' | LIKE | NOT_LA
LIKE | ILIKE | NOT_LA ILIKE
expr_list ::= a_expr | expr_list ',' a_expr
func_arg_list ::= func_arg_expr | func_arg_list ',' func_arg_expr
func_arg_expr ::= a_expr | param_name COLON_EQUALS a_expr | param_name
EQUALS_GREATER a_expr
type_list ::= Typename | type_list ',' Typename
array_expr ::= '[' expr_list ']' | '[' array_expr_list ']' | '[' ']'
array_expr_list ::= array_expr | array_expr_list ',' array_expr
extract_list ::= extract_arg FROM a_expr |
extract_arg ::= IDENT | YEAR_P | MONTH_P | DAY_P | HOUR_P | MINUTE_P |
SECOND_P | Sconst
unicode_normal_form ::= NFC | NFD | NFKC | NFKD
overlay_list ::= a_expr overlay_placing substr_from substr_for | a_expr
overlay_placing substr_from
overlay_placing ::= PLACING a_expr
position_list ::= b_expr IN_P b_expr |
substr_list ::= a_expr substr_from substr_for | a_expr substr_for
substr_from | a_expr substr_from | a_expr substr_for | expr_list |
substr_from ::= FROM a_expr
substr_for ::= FOR a_expr
trim_list ::= a_expr FROM expr_list | FROM expr_list | expr_list
in_expr ::= select_with_parens | '(' expr_list ')'
case_expr ::= CASE case_arg when_clause_list case_default END_P
when_clause_list ::= when_clause | when_clause_list when_clause
when_clause ::= WHEN a_expr THEN a_expr
case_default ::= ELSE a_expr |
case_arg ::= a_expr |
columnref ::= ColId | ColId indirection
indirection_el ::= '.' attr_name | '.' '*' | '[' a_expr ']' | '['
opt_slice_bound ':' opt_slice_bound ']'
opt_slice_bound ::= a_expr |
indirection ::= indirection_el | indirection indirection_el
opt_indirection ::= | opt_indirection indirection_el
opt_asymmetric ::= ASYMMETRIC | /*empty*/
opt_target_list ::= target_list |
target_list ::= target_el | target_list ',' target_el
target_el ::= a_expr AS ColLabel | a_expr IDENT | a_expr | '*'
qualified_name_list ::= qualified_name | qualified_name_list ','
qualified_name
qualified_name ::= ColId | ColId indirection
name_list ::= name | name_list ',' name
name ::= ColId
database_name ::= ColId
access_method ::= ColId
attr_name ::= ColLabel
index_name ::= ColId
file_name ::= Sconst
func_name ::= type_function_name | ColId indirection
AexprConst ::= Iconst | FCONST | Sconst | BCONST | XCONST | func_name
Sconst | func_name '(' func_arg_list opt_sort_clause ')' Sconst |
ConstTypename Sconst | ConstInterval Sconst opt_interval | ConstInterval
'(' Iconst ')' Sconst | TRUE_P | FALSE_P | NULL_P
Iconst ::= ICONST
Sconst ::= SCONST
SignedIconst ::= Iconst | '+' Iconst | '-' Iconst
RoleId ::= RoleSpec
RoleSpec ::= NonReservedWord | CURRENT_USER | SESSION_USER
role_list ::= RoleSpec | role_list ',' RoleSpec
ColId ::= IDENT | unreserved_keyword | col_name_keyword
type_function_name ::= IDENT | unreserved_keyword | type_func_name_keyword
NonReservedWord ::= IDENT | unreserved_keyword | col_name_keyword |
type_func_name_keyword
ColLabel ::= IDENT | unreserved_keyword | col_name_keyword |
type_func_name_keyword | reserved_keyword
unreserved_keyword ::= ABORT_P | ABSOLUTE_P | ACCESS | ACTION | ADD_P |
ADMIN | AFTER | AGGREGATE | ALSO | ALTER | ALWAYS | ASSERTION |
ASSIGNMENT | AT | ATTACH | ATTRIBUTE | BACKWARD | BEFORE | BEGIN_P | BY
| CACHE | CALL | CALLED | CASCADE | CASCADED | CATALOG_P | CHAIN |
CHARACTERISTICS | CHECKPOINT | CLASS | CLOSE | CLUSTER | COLUMNS |
COMMENT | COMMENTS | COMMIT | COMMITTED | CONFIGURATION | CONFLICT |
CONNECTION | CONSTRAINTS | CONTENT_P | CONTINUE_P | CONVERSION_P | COPY
| COST | CSV | CUBE | CURRENT_P | CURSOR | CYCLE | DATA_P | DATABASE |
DAY_P | DEALLOCATE | DECLARE | DEFAULTS | DEFERRED | DEFINER | DELETE_P
| DELIMITER | DELIMITERS | DEPENDS | DETACH | DICTIONARY | DISABLE_P |
DISCARD | DOCUMENT_P | DOMAIN_P | DOUBLE_P | DROP | EACH | ENABLE_P |
ENCODING | ENCRYPTED | ENUM_P | ESCAPE | EVENT | EXCLUDE | EXCLUDING |
EXCLUSIVE | EXECUTE | EXPLAIN | EXPRESSION | EXTENSION | EXTERNAL |
FAMILY | FILTER | FIRST_P | FOLLOWING | FORCE | FORWARD | FUNCTION |
FUNCTIONS | GENERATED | GLOBAL | GRANTED | GROUPS | HANDLER | HEADER_P |
HOLD | HOUR_P | IDENTITY_P | IF_P | IMMEDIATE | IMMUTABLE | IMPLICIT_P |
IMPORT_P | INCLUDE | INCLUDING | INCREMENT | INDEX | INDEXES | INHERIT |
INHERITS | INLINE_P | INPUT_P | INSENSITIVE | INSERT | INSTEAD | INVOKER
| ISOLATION | KEY | LABEL | LANGUAGE | LARGE_P | LAST_P | LEAKPROOF |
LEVEL | LISTEN | LOAD | LOCAL | LOCATION | LOCK_P | LOCKED | LOGGED |
MAPPING | MATCH | MATERIALIZED | MAXVALUE | METHOD | MINUTE_P | MINVALUE
| MODE | MONTH_P | MOVE | NAME_P | NAMES | NEW | NEXT | NFC | NFD | NFKC
| NFKD | NO | NORMALIZED | NOTHING | NOTIFY | NOWAIT | NULLS_P |
OBJECT_P | OF | OFF | OIDS | OLD | OPERATOR | OPTION | OPTIONS |
ORDINALITY | OTHERS | OVER | OVERRIDING | OWNED | OWNER | PARALLEL |
PARSER | PARTIAL | PARTITION | PASSING | PASSWORD | PLANS | POLICY |
PRECEDING | PREPARE | PREPARED | PRESERVE | PRIOR | PRIVILEGES |
PROCEDURAL | PROCEDURE | PROCEDURES | PROGRAM | PUBLICATION | QUOTE |
RANGE | READ | REASSIGN | RECHECK | RECURSIVE | REF | REFERENCING |
REFRESH | REINDEX | RELATIVE_P | RELEASE | RENAME | REPEATABLE | REPLACE
| REPLICA | RESET | RESTART | RESTRICT | RETURNS | REVOKE | ROLE |
ROLLBACK | ROLLUP | ROUTINE | ROUTINES | ROWS | RULE | SAVEPOINT |
SCHEMA | SCHEMAS | SCROLL | SEARCH | SECOND_P | SECURITY | SEQUENCE |
SEQUENCES | SERIALIZABLE | SERVER | SESSION | SET | SETS | SHARE | SHOW
| SIMPLE | SKIP | SNAPSHOT | SQL_P | STABLE | STANDALONE_P | START |
STATEMENT | STATISTICS | STDIN | STDOUT | STORAGE | STORED | STRICT_P |
STRIP_P | SUBSCRIPTION | SUPPORT | SYSID | SYSTEM_P | TABLES |
TABLESPACE | TEMP | TEMPLATE | TEMPORARY | TEXT_P | TIES | TRANSACTION |
TRANSFORM | TRIGGER | TRUNCATE | TRUSTED | TYPE_P | TYPES_P | UESCAPE |
UNBOUNDED | UNCOMMITTED | UNENCRYPTED | UNKNOWN | UNLISTEN | UNLOGGED |
UNTIL | UPDATE | VACUUM | VALID | VALIDATE | VALIDATOR | VALUE_P |
VARYING | VERSION_P | VIEW | VIEWS | VOLATILE | WHITESPACE_P | WITHIN |
WITHOUT | WORK | WRAPPER | WRITE | XML_P | YEAR_P | YES_P | ZONE
col_name_keyword ::= BETWEEN | BIGINT | BIT | BOOLEAN_P | CHAR_P |
CHARACTER | COALESCE | DEC | DECIMAL_P | EXISTS | EXTRACT | FLOAT_P |
GREATEST | GROUPING | INOUT | INT_P | INTEGER | INTERVAL | LEAST |
NATIONAL | NCHAR | NONE | NORMALIZE | NULLIF | NUMERIC | OUT_P | OVERLAY
| POSITION | PRECISION | REAL | ROW | SETOF | SMALLINT | SUBSTRING |
TIME | TIMESTAMP | TREAT | TRIM | VALUES | VARCHAR | XMLATTRIBUTES |
XMLCONCAT | XMLELEMENT | XMLEXISTS | XMLFOREST | XMLNAMESPACES |
XMLPARSE | XMLPI | XMLROOT | XMLSERIALIZE | XMLTABLE
type_func_name_keyword ::= AUTHORIZATION | BINARY | COLLATION |
CONCURRENTLY | CROSS | CURRENT_SCHEMA | FREEZE | FULL | ILIKE | INNER_P
| IS | ISNULL | JOIN | LEFT | LIKE | NATURAL | NOTNULL | OUTER_P |
OVERLAPS | RIGHT | SIMILAR | TABLESAMPLE | VERBOSE
reserved_keyword ::= ALL | ANALYSE | ANALYZE | AND | ANY | ARRAY | AS |
ASC | ASYMMETRIC | BOTH | CASE | CAST | CHECK | COLLATE | COLUMN |
CONSTRAINT | CREATE | CURRENT_CATALOG | CURRENT_DATE | CURRENT_ROLE |
CURRENT_TIME | CURRENT_TIMESTAMP | CURRENT_USER | DEFAULT | DEFERRABLE |
DESC | DISTINCT | DO | ELSE | END_P | EXCEPT | FALSE_P | FETCH | FOR |
FOREIGN | FROM | GRANT | GROUP_P | HAVING | IN_P | INITIALLY | INTERSECT
| INTO | LATERAL_P | LEADING | LIMIT | LOCALTIME | LOCALTIMESTAMP | NOT
| NULL_P | OFFSET | ON | ONLY | OR | ORDER | PLACING | PRIMARY |
REFERENCES | RETURNING | SELECT | SESSION_USER | SOME | SYMMETRIC |
TABLE | THEN | TO | TRAILING | TRUE_P | UNION | UNIQUE | USER | USING |
VARIADIC | WHEN | WHERE | WINDOW | WITH
// Tokens from postgresql-13.3/src/include/parser/kwlist.h
ABORT_P ::= "abort"
ABSOLUTE_P ::= "absolute"
ACCESS ::= "access"
ACTION ::= "action"
ADD_P ::= "add"
ADMIN ::= "admin"
AFTER ::= "after"
AGGREGATE ::= "aggregate"
ALL ::= "all"
ALSO ::= "also"
ALTER ::= "alter"
ALWAYS ::= "always"
ANALYSE ::= "analyse"
ANALYZE ::= "analyze"
AND ::= "and"
ANY ::= "any"
ARRAY ::= "array"
AS ::= "as"
ASC ::= "asc"
ASSERTION ::= "assertion"
ASSIGNMENT ::= "assignment"
ASYMMETRIC ::= "asymmetric"
AT ::= "at"
ATTACH ::= "attach"
ATTRIBUTE ::= "attribute"
AUTHORIZATION ::= "authorization"
BACKWARD ::= "backward"
BEFORE ::= "before"
BEGIN_P ::= "begin"
BETWEEN ::= "between"
BIGINT ::= "bigint"
BINARY ::= "binary"
BIT ::= "bit"
BOOLEAN_P ::= "boolean"
BOTH ::= "both"
BY ::= "by"
CACHE ::= "cache"
CALL ::= "call"
CALLED ::= "called"
CASCADE ::= "cascade"
CASCADED ::= "cascaded"
CASE ::= "case"
CAST ::= "cast"
CATALOG_P ::= "catalog"
CHAIN ::= "chain"
CHAR_P ::= "char"
CHARACTER ::= "character"
CHARACTERISTICS ::= "characteristics"
CHECK ::= "check"
CHECKPOINT ::= "checkpoint"
CLASS ::= "class"
CLOSE ::= "close"
CLUSTER ::= "cluster"
COALESCE ::= "coalesce"
COLLATE ::= "collate"
COLLATION ::= "collation"
COLUMN ::= "column"
COLUMNS ::= "columns"
COMMENT ::= "comment"
COMMENTS ::= "comments"
COMMIT ::= "commit"
COMMITTED ::= "committed"
CONCURRENTLY ::= "concurrently"
CONFIGURATION ::= "configuration"
CONFLICT ::= "conflict"
CONNECTION ::= "connection"
CONSTRAINT ::= "constraint"
CONSTRAINTS ::= "constraints"
CONTENT_P ::= "content"
CONTINUE_P ::= "continue"
CONVERSION_P ::= "conversion"
COPY ::= "copy"
COST ::= "cost"
CREATE ::= "create"
CROSS ::= "cross"
CSV ::= "csv"
CUBE ::= "cube"
CURRENT_P ::= "current"
CURRENT_CATALOG ::= "current_catalog"
CURRENT_DATE ::= "current_date"
CURRENT_ROLE ::= "current_role"
CURRENT_SCHEMA ::= "current_schema"
CURRENT_TIME ::= "current_time"
CURRENT_TIMESTAMP ::= "current_timestamp"
CURRENT_USER ::= "current_user"
CURSOR ::= "cursor"
CYCLE ::= "cycle"
DATA_P ::= "data"
DATABASE ::= "database"
DAY_P ::= "day"
DEALLOCATE ::= "deallocate"
DEC ::= "dec"
DECIMAL_P ::= "decimal"
DECLARE ::= "declare"
DEFAULT ::= "default"
DEFAULTS ::= "defaults"
DEFERRABLE ::= "deferrable"
DEFERRED ::= "deferred"
DEFINER ::= "definer"
DELETE_P ::= "delete"
DELIMITER ::= "delimiter"
DELIMITERS ::= "delimiters"
DEPENDS ::= "depends"
DESC ::= "desc"
DETACH ::= "detach"
DICTIONARY ::= "dictionary"
DISABLE_P ::= "disable"
DISCARD ::= "discard"
DISTINCT ::= "distinct"
DO ::= "do"
DOCUMENT_P ::= "document"
DOMAIN_P ::= "domain"
DOUBLE_P ::= "double"
DROP ::= "drop"
EACH ::= "each"
ELSE ::= "else"
ENABLE_P ::= "enable"
ENCODING ::= "encoding"
ENCRYPTED ::= "encrypted"
END_P ::= "end"
ENUM_P ::= "enum"
ESCAPE ::= "escape"
EVENT ::= "event"
EXCEPT ::= "except"
EXCLUDE ::= "exclude"
EXCLUDING ::= "excluding"
EXCLUSIVE ::= "exclusive"
EXECUTE ::= "execute"
EXISTS ::= "exists"
EXPLAIN ::= "explain"
EXPRESSION ::= "expression"
EXTENSION ::= "extension"
EXTERNAL ::= "external"
EXTRACT ::= "extract"
FALSE_P ::= "false"
FAMILY ::= "family"
FETCH ::= "fetch"
FILTER ::= "filter"
FIRST_P ::= "first"
FLOAT_P ::= "float"
FOLLOWING ::= "following"
FOR ::= "for"
FORCE ::= "force"
FOREIGN ::= "foreign"
FORWARD ::= "forward"
FREEZE ::= "freeze"
FROM ::= "from"
FULL ::= "full"
FUNCTION ::= "function"
FUNCTIONS ::= "functions"
GENERATED ::= "generated"
GLOBAL ::= "global"
GRANT ::= "grant"
GRANTED ::= "granted"
GREATEST ::= "greatest"
GROUP_P ::= "group"
GROUPING ::= "grouping"
GROUPS ::= "groups"
HANDLER ::= "handler"
HAVING ::= "having"
HEADER_P ::= "header"
HOLD ::= "hold"
HOUR_P ::= "hour"
IDENTITY_P ::= "identity"
IF_P ::= "if"
ILIKE ::= "ilike"
IMMEDIATE ::= "immediate"
IMMUTABLE ::= "immutable"
IMPLICIT_P ::= "implicit"
IMPORT_P ::= "import"
IN_P ::= "in"
INCLUDE ::= "include"
INCLUDING ::= "including"
INCREMENT ::= "increment"
INDEX ::= "index"
INDEXES ::= "indexes"
INHERIT ::= "inherit"
INHERITS ::= "inherits"
INITIALLY ::= "initially"
INLINE_P ::= "inline"
INNER_P ::= "inner"
INOUT ::= "inout"
INPUT_P ::= "input"
INSENSITIVE ::= "insensitive"
INSERT ::= "insert"
INSTEAD ::= "instead"
INT_P ::= "int"
INTEGER ::= "integer"
INTERSECT ::= "intersect"
INTERVAL ::= "interval"
INTO ::= "into"
INVOKER ::= "invoker"
IS ::= "is"
ISNULL ::= "isnull"
ISOLATION ::= "isolation"
JOIN ::= "join"
KEY ::= "key"
LABEL ::= "label"
LANGUAGE ::= "language"
LARGE_P ::= "large"
LAST_P ::= "last"
LATERAL_P ::= "lateral"
LEADING ::= "leading"
LEAKPROOF ::= "leakproof"
LEAST ::= "least"
LEFT ::= "left"
LEVEL ::= "level"
LIKE ::= "like"
LIMIT ::= "limit"
LISTEN ::= "listen"
LOAD ::= "load"
LOCAL ::= "local"
LOCALTIME ::= "localtime"
LOCALTIMESTAMP ::= "localtimestamp"
LOCATION ::= "location"
LOCK_P ::= "lock"
LOCKED ::= "locked"
LOGGED ::= "logged"
MAPPING ::= "mapping"
MATCH ::= "match"
MATERIALIZED ::= "materialized"
MAXVALUE ::= "maxvalue"
METHOD ::= "method"
MINUTE_P ::= "minute"
MINVALUE ::= "minvalue"
MODE ::= "mode"
MONTH_P ::= "month"
MOVE ::= "move"
NAME_P ::= "name"
NAMES ::= "names"
NATIONAL ::= "national"
NATURAL ::= "natural"
NCHAR ::= "nchar"
NEW ::= "new"
NEXT ::= "next"
NFC ::= "nfc"
NFD ::= "nfd"
NFKC ::= "nfkc"
NFKD ::= "nfkd"
NO ::= "no"
NONE ::= "none"
NORMALIZE ::= "normalize"
NORMALIZED ::= "normalized"
NOT ::= "not"
NOTHING ::= "nothing"
NOTIFY ::= "notify"
NOTNULL ::= "notnull"
NOWAIT ::= "nowait"
NULL_P ::= "null"
NULLIF ::= "nullif"
NULLS_P ::= "nulls"
NUMERIC ::= "numeric"
OBJECT_P ::= "object"
OF ::= "of"
OFF ::= "off"
OFFSET ::= "offset"
OIDS ::= "oids"
OLD ::= "old"
ON ::= "on"
ONLY ::= "only"
OPERATOR ::= "operator"
OPTION ::= "option"
OPTIONS ::= "options"
OR ::= "or"
ORDER ::= "order"
ORDINALITY ::= "ordinality"
OTHERS ::= "others"
OUT_P ::= "out"
OUTER_P ::= "outer"
OVER ::= "over"
OVERLAPS ::= "overlaps"
OVERLAY ::= "overlay"
OVERRIDING ::= "overriding"
OWNED ::= "owned"
OWNER ::= "owner"
PARALLEL ::= "parallel"
PARSER ::= "parser"
PARTIAL ::= "partial"
PARTITION ::= "partition"
PASSING ::= "passing"
PASSWORD ::= "password"
PLACING ::= "placing"
PLANS ::= "plans"
POLICY ::= "policy"
POSITION ::= "position"
PRECEDING ::= "preceding"
PRECISION ::= "precision"
PREPARE ::= "prepare"
PREPARED ::= "prepared"
PRESERVE ::= "preserve"
PRIMARY ::= "primary"
PRIOR ::= "prior"
PRIVILEGES ::= "privileges"
PROCEDURAL ::= "procedural"
PROCEDURE ::= "procedure"
PROCEDURES ::= "procedures"
PROGRAM ::= "program"
PUBLICATION ::= "publication"
QUOTE ::= "quote"
RANGE ::= "range"
READ ::= "read"
REAL ::= "real"
REASSIGN ::= "reassign"
RECHECK ::= "recheck"
RECURSIVE ::= "recursive"
REF ::= "ref"
REFERENCES ::= "references"
REFERENCING ::= "referencing"
REFRESH ::= "refresh"
REINDEX ::= "reindex"
RELATIVE_P ::= "relative"
RELEASE ::= "release"
RENAME ::= "rename"
REPEATABLE ::= "repeatable"
REPLACE ::= "replace"
REPLICA ::= "replica"
RESET ::= "reset"
RESTART ::= "restart"
RESTRICT ::= "restrict"
RETURNING ::= "returning"
RETURNS ::= "returns"
REVOKE ::= "revoke"
RIGHT ::= "right"
ROLE ::= "role"
ROLLBACK ::= "rollback"
ROLLUP ::= "rollup"
ROUTINE ::= "routine"
ROUTINES ::= "routines"
ROW ::= "row"
ROWS ::= "rows"
RULE ::= "rule"
SAVEPOINT ::= "savepoint"
SCHEMA ::= "schema"
SCHEMAS ::= "schemas"
SCROLL ::= "scroll"
SEARCH ::= "search"
SECOND_P ::= "second"
SECURITY ::= "security"
SELECT ::= "select"
SEQUENCE ::= "sequence"
SEQUENCES ::= "sequences"
SERIALIZABLE ::= "serializable"
SERVER ::= "server"
SESSION ::= "session"
SESSION_USER ::= "session_user"
SET ::= "set"
SETOF ::= "setof"
SETS ::= "sets"
SHARE ::= "share"
SHOW ::= "show"
SIMILAR ::= "similar"
SIMPLE ::= "simple"
SKIP ::= "skip"
SMALLINT ::= "smallint"
SNAPSHOT ::= "snapshot"
SOME ::= "some"
SQL_P ::= "sql"
STABLE ::= "stable"
STANDALONE_P ::= "standalone"
START ::= "start"
STATEMENT ::= "statement"
STATISTICS ::= "statistics"
STDIN ::= "stdin"
STDOUT ::= "stdout"
STORAGE ::= "storage"
STORED ::= "stored"
STRICT_P ::= "strict"
STRIP_P ::= "strip"
SUBSCRIPTION ::= "subscription"
SUBSTRING ::= "substring"
SUPPORT ::= "support"
SYMMETRIC ::= "symmetric"
SYSID ::= "sysid"
SYSTEM_P ::= "system"
TABLE ::= "table"
TABLES ::= "tables"
TABLESAMPLE ::= "tablesample"
TABLESPACE ::= "tablespace"
TEMP ::= "temp"
TEMPLATE ::= "template"
TEMPORARY ::= "temporary"
TEXT_P ::= "text"
THEN ::= "then"
TIES ::= "ties"
TIME ::= "time"
TIMESTAMP ::= "timestamp"
TO ::= "to"
TRAILING ::= "trailing"
TRANSACTION ::= "transaction"
TRANSFORM ::= "transform"
TREAT ::= "treat"
TRIGGER ::= "trigger"
TRIM ::= "trim"
TRUE_P ::= "true"
TRUNCATE ::= "truncate"
TRUSTED ::= "trusted"
TYPE_P ::= "type"
TYPES_P ::= "types"
UESCAPE ::= "uescape"
UNBOUNDED ::= "unbounded"
UNCOMMITTED ::= "uncommitted"
UNENCRYPTED ::= "unencrypted"
UNION ::= "union"
UNIQUE ::= "unique"
UNKNOWN ::= "unknown"
UNLISTEN ::= "unlisten"
UNLOGGED ::= "unlogged"
UNTIL ::= "until"
UPDATE ::= "update"
USER ::= "user"
USING ::= "using"
VACUUM ::= "vacuum"
VALID ::= "valid"
VALIDATE ::= "validate"
VALIDATOR ::= "validator"
VALUE_P ::= "value"
VALUES ::= "values"
VARCHAR ::= "varchar"
VARIADIC ::= "variadic"
VARYING ::= "varying"
VERBOSE ::= "verbose"
VERSION_P ::= "version"
VIEW ::= "view"
VIEWS ::= "views"
VOLATILE ::= "volatile"
WHEN ::= "when"
WHERE ::= "where"
WHITESPACE_P ::= "whitespace"
WINDOW ::= "window"
WITH ::= "with"
WITHIN ::= "within"
WITHOUT ::= "without"
WORK ::= "work"
WRAPPER ::= "wrapper"
WRITE ::= "write"
XML_P ::= "xml"
XMLATTRIBUTES ::= "xmlattributes"
XMLCONCAT ::= "xmlconcat"
XMLELEMENT ::= "xmlelement"
XMLEXISTS ::= "xmlexists"
XMLFOREST ::= "xmlforest"
XMLNAMESPACES ::= "xmlnamespaces"
XMLPARSE ::= "xmlparse"
XMLPI ::= "xmlpi"
XMLROOT ::= "xmlroot"
XMLSERIALIZE ::= "xmlserialize"
XMLTABLE ::= "xmltable"
YEAR_P ::= "year"
YES_P ::= "yes"
ZONE ::= "zone"