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发布于博客园