引言
在 PostgreSQL 中,單引號和雙引號用於不同的目的。剛開始使用這些資料庫時,可能很難理解這兩種引號之間的區別以及如何正確使用它們。
在本指南中,我們將探討 PostgreSQL 如何解釋單引號和雙引號。我們將討論使用各種引號的副作用,並提供每種引號的使用場景示例。
雙引號
在 PostgreSQL 中,雙引號(例如 "a red dog")始終用於表示*定界識別符號*。在這種上下文中,*識別符號*是 PostgreSQL 中物件的名稱,例如表名或列名。定界識別符號是具有明確標記的開始和結束的識別符號。
例如,要從 customer 表中選擇所有資訊,您可以輸入以下內容。這裡,表名用雙引號括起來。
SELECT * FROM "customer";
雖然雙引號表示一個識別符號,但並非所有識別符號都使用雙引號。對於上述示例,更常見的是識別符號完全不加引號。
SELECT * FROM customer;
引用識別符號和大小寫敏感性問題
雖然上面使用的兩種格式對於 customer 表都正確,但*確實存在*重要區別。
不帶引號的識別符號(如第二種版本)*不區分大小寫*。這意味著 PostgreSQL 會將 customer、Customer 和 CUSTOMER 識別為同一個物件。
然而,帶引號的識別符號*區分大小寫*。這導致 PostgreSQL 將 "CUSTOMER" 和 "customer" 視為完全不同的物件。
這種差異允許您建立在 PostgreSQL 中否則不合法的識別符號。例如,如果您需要建立一個包含句點的列,您將需要使用雙引號,以便 PostgreSQL 正確解釋它。
但是,請記住,如果不小心使用,這可能會導致可用性問題。例如,假設您在建立物件時使用雙引號來保留識別符號中的大寫字元。從那時起,每次引用它時,您都需要使用雙引號來匹配該大小寫。
請謹慎使用雙引號以獲得更好的相容性,尤其是在建立物件時。如果您想使用雙引號,請記住,如果對完全小寫的識別符號使用雙引號,則不會出現大小寫問題。
單引號
另一方面,單引號用於表示一個標記是字串。這在 PostgreSQL 的許多不同上下文中都有使用。
一般來說,如果一個項是字串,它需要用單引號括起來。請記住,在建立和引用物件時,識別符號必須用不帶引號或帶雙引號的文字表示。
例如,我們在這裡使用單引號將一個字串插入到資料庫中的 text 欄位中。
INSERT INTO my_table(text) VALUES ('hello there!');
如果需要,我們也可以選擇在識別符號周圍使用雙引號,像這樣:
INSERT INTO "my_table"("text") VALUES ('hello there!');
假設 my_table 和 text 列在建立時未加引號或使用小寫,則上述兩個語句是相同的。
如果您需要在字串*中*包含一個單引號,可以透過插入兩個連續的單引號來實現(兩個單引號,而不是一個雙引號)。
例如,您可以透過輸入以下內容來插入另一個帶有嵌入式單引號的字串:
INSERT INTO my_table(text) VALUES ('How''s it going?');
單引號字串是賦值或檢查字串值的適當方式。
更多示例
在這裡,我們將回顧更多示例,以幫助闡明 SQL 語句的不同部分為何使用不同的引用方法。
使用密碼建立新角色
首先,我們可以看一下角色建立語句:
CREATE ROLE "user1" WITH LOGIN PASSWORD 'secretpassword';
該語句有兩個帶引號的組成部分:
user1使用雙引號,因為它將引用一個角色,而角色是一個識別符號。secretpassword是一個字串,將存在於表列中。因此,它是一個字串值,需要用單引號。
檢查當前使用者是否具有管理角色的必要許可權
以下查詢確定使用者當前登入的角色是否具有管理資料庫叢集中角色的許可權:
SELECT 'Yes' AS "Can I manage roles?" FROM pg_roles WHERE rolname = :'USER' AND (rolsuper OR rolcreaterole);
這裡使用了幾種不同的引用模式:
Yes使用單引號,因為它是一個將在列值上下文中列印的值。Can I manage roles?使用雙引號,因為它將是構建表中列的名稱,因此是一個識別符號。USER使用單引號,因為我們正在檢查一個字串的值。:'USER'語法是一種特殊格式,用於在將結果值置於單引號中時插入psql的USER變數。
總結
在本指南中,我們探討了 PostgreSQL 中的單引號和雙引號。雙引號用於指示資料庫中的識別符號,例如表、列名和角色。相比之下,單引號用於指示字串字面量。
瞭解如何在 PostgreSQL 中正確使用引號,以及不同引用選擇的含義,將幫助您避免令人沮喪的錯誤。雖然引用規則可能與您熟悉的其他系統不符,但一旦您理解了它們各自的用途,它們將非常有用。
如果您正在使用 Prisma 管理您的 PostgreSQL 資料庫,引號型別會在傳送到資料庫之前自動解析。例外情況是,如果您使用 原始查詢,在這種情況下,您需要注意此處涵蓋的資訊,以避免混淆 PostgreSQL 如何解釋不同型別的引號。
