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發佈於博客園

 

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