<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 35.2\. PostgreSQL類型系統 PostgreSQL數據類型可以分為基本類型、復合類型、域、偽類型。 ## 35.2.1\. 基本類型 基本類型是那些在SQL語言層次更低級別(通常是C語言)上實現的類型(比如`int4`類型), 它們通常與抽像數據類型對應。PostgreSQL對這些數據類型只能通過用戶提供的函數來操作, 并且對這些數據類型行為的理解只限于用戶所描述的范圍。基本類型進一步分成標量和數組類型。 對于每種標量類型,系統都會自動創建一個對應的數組類型,可以保存該標量類型的變長數組。 ## 35.2.2\. 復合類型 復合類型(或者說行類型)是用戶創建表時創建的。 也可以用[CREATE TYPE](#calibre_link-100)創建一個"獨立的"、沒有關聯表的復合類型。 復合類型只是一個帶著相關字段名稱的基本類型的列表。 復合類型的數值是一行字段值或者一條字段值組成的記錄。 用戶可以從SQL查詢里訪問其字段。 參考[Section 8.16](#calibre_link-956)獲取更多復合類型的相關信息。 ## 35.2.3\. 域 域基于一種特定的基本類型,從很多角度來看,它們也可以和其對應的基本類型交換。 但是,域可以有約束,把它的有效值限制在其對應的基本類型的有效值范圍的一個子集中。 域可以使用SQL命令[CREATE DOMAIN](#calibre_link-567)創建。 它們的創建和使用不在本章討論。 ## 35.2.4\. 偽-類型 有一些用于特殊目的"偽類型"。偽類型不能作為表的字段類型, 也不能作為復合類型的屬性,但是它們可以用于聲明函數的參數和結果類型。 這樣就在類型系統里提供了一個標識特殊類型函數的機制。 [Table 8-24](#calibre_link-957)列出了現有的偽類型。 ## 35.2.5\. 多態類型 `anyelement`,`anyarray`, `anynonarray`, `anyenum`, 和`anyrange`是五種特別有趣的偽類型,它們被稱作_多態類型_。 任何用這些類型定義的函數就叫做_多態函數_。 一種多態函數可以在許多不同的數據類型上操作, 它們根據調用中實際傳遞進來的數據類型判斷具體的類型。 多態參數和結果是相互綁定的,并且在分析查詢調用的函數時解析成特定的數據類型。 每個聲明成`anyelement`的位置(參數或者返回類型)都允許擁有一個特定的實際數據類型, 但是在任何給定的調用過程中,它們都必須是_同樣的_類型。 每個聲明為`anyarray`的位置都可以是任何數組數據類型,類似的,聲明為`anyrange`的位置 也必許都是同樣的類型。而且,如果有些位置聲明為`anyarray`而其它位置聲明為`anyelement`, 那么在`anyarray`位置上的類型必須是元素類型與那些出現在`anyelement`位置上的類型相同的數組。 類似的,如果有聲明為`anyrange`的位置而且其他的聲明為`anyelement`,那么 在`anyrange`位置上的類型必須是子類型與那些出現在`anyelement`位置上類型相同 的范圍。`anynonarray`實際上被看做`anyelement`, 但卻多一個約束:實際類型必須不能是一個數組類型。 `anyenum`實際上被看做`anyelement`,但卻多一個約束: 實際類型必須是一個枚舉類型。 因此,如果多個參數位置聲明為多態類型,其實際效果是只允許某些實際參數類型的組合出現。 比如,一個函數聲明為`equal(anyelement, anyelement)`將接受任何兩個輸入值,只要它們的數據類型相同。 如果一個函數的返回值聲明為多態類型,那么至少有一個參數位置也是多態的, 并且提供給參數的類型決定本次調用實際返回的類型。比如,如果沒有數組下標機制, 那么我們可以定義一個實現下標的函數`subscript(anyarray, integer) returns anyelement`。 這個聲明約束第一個實際參數是一個數組類型,并且允許分析器從第一個參數的實際類型推導出正確的返回類型。 聲明為一個`f(anyarray) returns anyenum`的函數的另一個例子只接受枚舉類型的數組。 需要注意的是,`anynonarray`和`anyenum`不代表不同的類型變量; 它們是與`anyelement`相同的類型,只有一個額外的約束。 例如,聲明一個函數為`f(anyelement, anyenum)` 等同于聲明它為`f(anyenum, anyenum)`: 兩個實際參數必須是相同的枚舉類型。 一個可變參數函數(其使用一個可變數目的參數,如[Section 35.4.5](#calibre_link-914)中描述) 可以是多態的: 可以通過聲明它的最后一個參數為`VARIADIC` `anyarray`來實現。 為了實現參數匹配并決定實際結果類型, 這樣一個函數的行為等同于將`anynonarray`參數寫一個合適的數目。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看