PostgreSQL:标识符( Identifier)构成规则探究

PostgreSQL 14.0

---

 

疑问

数据库、schema、table、字段、视图 等的名称有什么规范呢?

使用过程中,可以用字母开头,还可以有下划线,更准确的规则是什么呢?

这些名称的长度有什么限制呢?

 

带着这些疑问,开始了调查。ben发布于博客园

 

在官网下载了 PostgreSQL 的文档(PDF,网页版为 参考资料#3),又搜索了“postgresql 标识符 规范”(bing.com),找到了 参考资料#1、参考资料#2,最终解决了孤的疑问。

 

答案

在官文的 4.1. Lexical Structure》4.1.1. Identifiers and Key Words 中 给出了详细信息。

摘要1:词法结构

简述1:

SQL输入包含 一些列命令(commands)。

每个命令由 一些列记号(tokens)组成。

记号(token)的种类:关键词(keyword),标识符(identifier),引用的标识符(quoted identifier),字面值(或常量),或者 特殊字符(special character symbol)。

记号 通常使用 空白字符分割(space, tab, newline)。ben发布于博客园

 

摘要2:构成规则

简述2:

标识符  和 关键词

它们有相同的 词法结构(lexical structure)。

格式:

以一个字母开头;

首字母包括 a-z(常用),及其它 非拉丁字母(比如,中文等);(letters with diacritical marks 怎么翻译?TODO

后续字符:字母,下划线,数字(0-9),美元符号($)。ben发布于博客园

注意,美元符号 不符合 SQL标准

注意,SQL标准中的 关键词 不包含数字 或者 不会以下换线开头或结尾。

 

补充,SQL 有两个主要的标准,分别是 SQL92 和 SQL99 。

 

摘要3:长度

简述3:

长度由  NAMEDATALEN 决定,默认值为 64,因此,长度最大为 63字节;ben发布于博客园

可以通过修改源码(pg_config_manual.h)再编译进行修改;

关键词 和 没有用引号括起来的标识符(unquoted identifiers) 是 不区分大小写的。

 

摘要4:引号括起来的标识符(quoted identifier)

简述4:

标识符可以使用 双引号 括起来;

这种标识符仍然遵循 最大长度 63字节 的限制;

不同的时,这种标识符 区分大小写——"Foo" 和 "FOO" 是不同的标识符;

注意,在PostgreSQL中,不用双引号括起来的标识符 默认转 小写(lower case),这一点和 SQL标准 不兼容

 

至此,基本上说清楚了,疑问也解除了。ben发布于博客园

 

还有其它形式的标识符,详情可以查看官方文档:目前自己未使用过

-- A variant of quoted identifiers allows including escaped Unicode characters identified by their code points.
U&"d\0061t\+000061"
U&"\0441\043B\043E\043D"

-- a different escape character than backslash is desired: using the UESCAPE clause
U&"d!0061t!+000061" UESCAPE '!'

ben发布于博客园

---END---

 

本文链接:

https://www.cnblogs.com/luo630/p/17082993.htmlben发布于博客园

ben发布于博客园

参考资料

1、PostgreSQL开发中的小坑

https://zhuanlan.zhihu.com/p/120858377

标识符问题

官方文档章节:4.1. Lexical Structure

2、PostgreSQL初识 之 标识符与关键字

https://blog.csdn.net/Wwinky/article/details/118915192

by __Wwinky

于 2021-07-19 22:22:16 发布

3、PostgreSQL 14.6 Documentation

https://www.postgresql.org/docs/14/index.html

也可以下载PDF版本查看:

4.1. Lexical Structure

极其重要!

4、

 

ben发布于博客园

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章