支援版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

10.4. 值儲存 #

要插入到表格中的值會根據以下步驟轉換為目標欄位的資料類型。

值儲存類型轉換

  1. 檢查是否與目標完全匹配。

  2. 否則,嘗試將表達式轉換為目標類型。如果 pg_cast 目錄中註冊了這兩種類型之間的賦值轉換,則可以進行轉換(請參閱CREATE CAST)。 或者,如果表達式是一個未知類型文字,則文字字串的內容將被饋送到目標類型的輸入轉換常式。

  3. 檢查目標類型是否存在大小調整轉換。 大小調整轉換是從該類型到其自身的轉換。 如果在pg_cast目錄中找到一個,則在儲存到目標欄位之前將其應用於表達式。 此類轉換的實現函數始終採用類型為integer的額外參數,該參數接收目標欄位的atttypmod值(通常是其宣告的長度,儘管對於不同的資料類型,atttypmod的解釋有所不同),並且它可以採用第三個boolean參數,該參數指示轉換是顯式還是隱式。 轉換函數負責應用任何與長度相關的語義,例如大小檢查或截斷。

範例 10.9. character儲存類型轉換

對於宣告為character(20)的目標欄位,以下語句顯示儲存的值已正確調整大小

CREATE TABLE vv (v character(20));
INSERT INTO vv SELECT 'abc' || 'def';
SELECT v, octet_length(v) FROM vv;

          v           | octet_length
----------------------+--------------
 abcdef               |           20
(1 row)

這裡真正發生的情況是,預設情況下,兩個未知文字被解析為text,從而允許將||運算符解析為text串聯。 然後,運算符的text結果將轉換為bpchar空白填充字元character資料類型的內部名稱)以匹配目標欄位類型。 (由於從textbpchar的轉換是二進制強制轉換,因此此轉換不會插入任何實際的函數呼叫。) 最後,在系統目錄中找到大小調整函數bpchar(bpchar, integer, boolean)並將其應用於運算符的結果和儲存的欄位長度。 此特定於類型的函數執行所需的長度檢查和填充空格的添加。


提交更正

如果您在文件中發現任何不正確、與特定功能的經驗不符或需要進一步說明的地方,請使用此表單報告文件問題。