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