【问题标题】:SQL "to" key word -- specifically POSTGRESQLSQL "to" 关键字——特别是 POSTGRESQL
【发布时间】:2021-02-11 21:29:06
【问题描述】:

“to”关键字在 SQL 中的作用,特别是 POSTGRESQL。

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

但是,很难搜索诸如“to”之类的简单单词。

这里没有出现,例如: https://www.w3schools.com/SQl/sql_ref_keywords.asp

我不知道这是否特定于 POSTGRESQL 或更一般的......

【问题讨论】:

  • 提示:无论是什么问题,w3schools 都不太可能提供帮助。这是编程的Wikihow。这是一个大大更好的table of keywords from Wikipedia
  • 它似乎是SQL reserved word。它不一定要任何事情,i
  • 该关键字在 SQL 中没有特殊含义。它出现在某些上下文中,例如 RENAME TO。如果您正在寻找特定 Postgres 命令的含义,最可靠的来源是官方文档,例如ALTER TABLE.
  • 如果不想通过the manual可以直接使用pg_get_keywords ()查询具体字词

标签: sql postgresql keyword


【解决方案1】:

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

  • 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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      你可以在https://www.postgresql.org/docs/13/sql-set.html看到它的描述

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

      编辑:正如评论者在下面非常有帮助地指出的那样,它被用于多个地方,包括 grantalter 语句等。它有时起到等号的作用(例如在设置参数时),有时也满足识别受影响的人或事物的作用(例如授予),有时表示操作的最终结果(回滚到,更改表到),具体取决于特定语句。就像英语中的“to”一样,它的作用取决于上下文。

      【讨论】:

      • 它也是alter table ... rename TO ...reassign ... TO ...grant ... TO ...rollback TO savepoint的一部分,可能还有更多
      猜你喜欢
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 2021-11-29
      • 2015-03-02
      • 2017-02-16
      • 2010-11-01
      相关资源
      最近更新 更多