要插入到表格中的值會根據以下步驟轉換為目標欄位的資料類型。
值儲存類型轉換
檢查是否與目標完全匹配。
否則,嘗試將表達式轉換為目標類型。如果 pg_cast
目錄中註冊了這兩種類型之間的賦值轉換,則可以進行轉換(請參閱CREATE CAST)。 或者,如果表達式是一個未知類型文字,則文字字串的內容將被饋送到目標類型的輸入轉換常式。
檢查目標類型是否存在大小調整轉換。 大小調整轉換是從該類型到其自身的轉換。 如果在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
資料類型的內部名稱)以匹配目標欄位類型。 (由於從text
到bpchar
的轉換是二進制強制轉換,因此此轉換不會插入任何實際的函數呼叫。) 最後,在系統目錄中找到大小調整函數bpchar(bpchar, integer, boolean)
並將其應用於運算符的結果和儲存的欄位長度。 此特定於類型的函數執行所需的長度檢查和填充空格的添加。
如果您在文件中發現任何不正確、與特定功能的經驗不符或需要進一步說明的地方,請使用此表單報告文件問題。