有几个地方会添加关键字,xxx_kwlist.h, xxx_garm.y,包括解析器、ecpg、plpgsql、pgorasql、复制以及gin中的。如下:

  

postgresql/lightdb保留关键字与非保留关键字_标识符

 

  

postgresql/lightdb保留关键字与非保留关键字_sql_02

  postgresql-13.3\doc\src\sgml\generate-keywords-table.pl负责生成keywords.sgml。

  postgresql-13.3\src\backend\parser\check_keywords.pl负责校验gram.y和kwlist.h中的关键字相同。

  其它各xxx_keywords.c/h各个文件一般include各种kwlist.h文件,这样可以保证只有2类源。

  SQL 区分保留关键字和 非保留关键字。根据标准,保留关键字是唯一真正的关键字;它们绝不允许作为标识符。非保留关键字仅在特定上下文中具有特殊含义,可以在其他上下文中用作标识符。大多数非保留关键字实际上是 SQL 指定的内置表和函数的名称。非保留关键字的概念本质上只是为了声明在某些上下文中将某些预定义的含义附加到单词上。

  在LightDB解析器中,事情有点复杂。有几种不同类别的标记,从永远不能用作标识符的标记到与普通标识符相比在解析器中绝对没有特殊地位的标记。(后者通常是由 SQL 指定的函数的情况。)添加关键字最重要之一的是在决定在gramy中的哪几类关键字列表中添加。即使保留关键字在LightDB中也不是完全保留的,但可以用作列标签(例如,​​SELECT 55 AS CHECK​​​即使​​CHECK​​是保留关键字)。

只能添加非保留关键字。

  查看所有关键字的函数为pg_get_keywords,如下:

​pg_get_keywords​​​() → ​​setof record​​​ ( , , ) ​word​​ ​​text​​​catcode​​ ​​"char"​​​catdesc​​ ​​text​

返回一组描述服务器识别的 SQL 关键字的记录。该​word​​列包含关键字。该​catcode​​列包含一个类别代码:​​U​​​对于未保留​​C​​​的关键字、可以是列名​​T​​​的关键字、可以是类型或函数名称的关键字或​​R​​​完全保留的关键字。该​catdesc​列包含描述类别的可能本地化字符串。

 

  完整的lightdb以及postgresql关键字清单可见​​http://www.light-pg.com/docs/lightdb/13.3-22.2/sql-keywords-appendix.html​​。

LightDB Enterprise Postgres--金融级关系型数据库,更快、更稳、更懂金融!