SQL“to”关键字——特别是 POSTGRESQL

问题描述

“to”关键字在 sql,特别是 POSTGREsql 中有什么作用。

我可以验证它是一个关键字。

然而,搜索诸如“to”之类的简单词是非常困难的。

它不会出现在这里,例如: https://www.w3schools.com/SQl/sql_ref_keywords.asp

我不知道这是特定于 POSTGREsql 还是更一般的......

解决方法

搜索解析器 src/backend/parser/gram.yTO,你会发现:

  • SET name TO 'var_value'

  • INTERVAL HOUR TO MINUTE(数据类型)

  • ALTER TABLE <name> OWNER TO RoleSpec

  • FOR VALUES FROM '(' expr_list ')' TO '(' expr_list ')'(分区)

  • COPY ( query ) TO file [WITH] [(options)]

  • ALTER EXTENSION name UPDATE [ TO version ]

  • IMPORT FOREIGN SCHEMA remote_schema [ { LIMIT TO | EXCEPT } ( table_list ) ]

  • CREATE POLICY name ON table [AS { PERMISSIVE | RESTRICTIVE } ] [FOR { SELECT | INSERT | UPDATE | DELETE } ] [TO role,...] [USING (qual)] [WITH CHECK (with check qual)]

  • ALTER TYPE_P any_name RENAME VALUE_P Sconst TO Sconst

  • REASSIGN OWNED BY role_list TO RoleSpec

  • GRANT privileges ON privilege_target TO grantee_list

  • CREATE opt_or_replace TRANSFORM FOR Typename LANGUAGE name (TO SQL_P WITH FUNCTION function_with_argtypes)

  • ALTER THING name RENAME TO newname

  • CREATE opt_or_replace RULE name AS ON event TO qualified_name where_clause DO opt_instead RuleActionList

  • ROLLBACK opt_transaction TO SAVEPOINT ColId

  • CREATE [DEFAULT] CONVERSION <conversion_name> FOR <encoding_name> TO <encoding_name> FROM <func_name>

  • a_expr SIMILAR TO a_expr

,

关键字不“做”任何事情,它们只是被保留,以便在实现 SQL 解析器时您可以假设如何处理查询的某些部分。

在技术术语中,任何 TO 实例(它是 ISO 9075 SQL standard 的一部分并被所有主要 SQL 方言使用)都被视为令牌,除非另有转义。

它“做什么”完全取决于上下文。在某些情况下,它只是装饰性的,而在其他情况下,它是语法的必需部分。它只是用来表达特定的语句。

为什么?这就是定义语法的方式。

请记住,SQL 被设计为一种类似英语的查询语言,因此某些语句的措辞反映了这一点。 INSERT INTO 可以表示为 INS 并且它的操作方式相同,但这不是设计者想要的样子。

,

TO 关键字与 SET 一起设置运行时参数时使用,例如 SET search_path TO my_schema,public;

您可以在https://www.postgresql.org/docs/13/sql-set.html

中看到它的描述

由于它不是“正常”SELECTUPDATECREATE 语法的一部分,因此您可以理解为什么它不经常出现。

编辑:作为评论者在下面非常有帮助地指出,它被用在几个地方,包括 grantalter 语句等。它有时起到等号的作用(例如在设置参数时) ) 有时扮演识别受影响的人或事物的角色(例如授予),有时根据特定语句表达操作的最终结果(回滚到、更改表到)。就像英语中的“to”一样,它在很大程度上取决于上下文。