<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智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # F.34\. spi spi模塊提供幾個使用SPI和觸發器的可行的示例。 當這些函數是它們自己正確的某些值時,它們對于你自己的目的是更有用的修改的例子。 該函數一般足夠任意的表使用,但是你在創建一個觸發器時必須指定表和字段名(正如下面描述)。 下面描述的每一組函數都是作為一個獨立可安裝的擴展提供的。 ## F.34.1\. refint — 實現參照完整性的函數 `check_primary_key()`和`check_foreign_key()` 用來檢查外鍵約束。(這個功能早已被內置的外鍵機制取代,但是該模塊作為一個例子仍然是有用的。) `check_primary_key()`檢查引用表。為了使用該函數,創建一個 `BEFORE INSERT OR UPDATE`觸發器,該觸發器在一個表上使用這個函數引用另一個表。 作為觸發器參數指定:來自外鍵的引用表的字段名,被引用的表名,來自主/唯一鍵的被引用表的字段名。 要處理多個外鍵,為每個引用創建一個外鍵。 `check_foreign_key()`檢查被引用的表。為了使用該函數,創建一個 `BEFORE DELETE OR UPDATE`觸發器, 該觸發器在一個表上使用這個函數被另外一個表引用。作為觸發器參數指定: 該函數必須執行檢查的引用表的數量,如果發現一個引用鍵的動作 (`cascade` — 刪除引用行,`restrict` — 如果引用鍵退出則退出事務,`setnull` — 設置引用鍵字段為空), 來自主/唯一鍵的被觸發表的字段名,然后是引用表名和字段名 (重復引用表的次數和第一個參數指定的一樣多)。請注意, 主/唯一鍵字段應該標記為NOT NULL并且應該有一個唯一索引。 示例在`refint.example`。 ## F.34.2\. timetravel — 實現時間行程的函數 很久以前,PostgreSQL有一個內置的時間行程特性, 保持為每個元組插入和刪除時間。這個特性可以使用這些函數模仿。 要使用這些函數,必須添加兩個`abstime`類型的字段到一個表, 用來存儲一個元組插入(start_date)和更改/刪除(stop_date)的日期: ``` CREATE TABLE mytab ( ... ... start_date abstime, stop_date abstime ... ... ); ``` 該字段可以隨你喜歡任意命名,但是在這個討論中我們將它們稱作start_date和stop_date。 當插入一個新行時,start_date通常設置為當前時間,stop_date設置為`infinity`。 如果插入的數據在這些字段中包含空,那么觸發器將自動的替換這些值。 通常只應該在重新加載轉儲的數據時在這些字段中明確的插入非空數據。 stop_date等于`infinity`的元組是"現在有效的",可以修改。 帶有限定的stop_date的元組不能再被修改—觸發器將阻止修改。 (如果需要修改,可以像下面顯示的那樣關閉時間行程。) 對于可修改的行,在更新時只有被更新的元組內的stop_date被更改(為當前時間) 并且插入一個帶有修改數據的新的元組。在這個新元組內的Start_date設置為當前時間, stop_date設置為`infinity`。 刪除并不實際刪除元組,只是設置它的stop_date為當前時間。 要查詢元組的"現在有效",在查詢的WHERE條件中包括 `stop_date = 'infinity'`。(你可能希望體現到一個視圖中。) 相似的,你可以用合適的start_date和stop_date條件查詢任意過去時間的元組有效性。 `timetravel()`是支持這個行為的常規觸發器函數。 在每個時間行程表上創建一個使用這個函數的 `BEFORE INSERT OR UPDATE OR DELETE`觸發器。 指定兩個觸發器參數:start_date和stop_date字段的實際名字。 可選的,你可以再指定一到三個參數,這些參數必須引用類型為`text`的字段。 觸發器將存儲當前用戶名到這些字段中,在INSERT期間存儲到第一個中, 在UPDATE期間存儲到第二個中,在DELETE期間存儲到第三個中。 `set_timetravel()`允許為一個表打開或關閉時間行程。`set_timetravel('mytab', 1)` 將為表`mytab`返回TT ON。`set_timetravel('mytab', 0)`將為表`mytab` 返回TT OFF。兩種情況下都報道老的狀態。當TT為off是,可以自由修改start_date和stop_date字段。 請注意,on/off狀態對于當前數據庫會話來說是局部的—新的會話將對于所有表來說總是以TT ON開始。 `get_timetravel()`為一個表返回TT的狀態而不會改變這個表。 在`timetravel.example`中有一個示例。 ## F.34.3\. autoinc — 自增字段函數 `autoinc()`是一個存儲序列的下一個值到一個整數字段的觸發器。 與內置的"序列字段"特性有些重疊,但是并不相同:`autoinc()` 在插入時重寫替代一個不同的字段值的嘗試,并且可選擇的, 它也可以用于在更新時增加字段。 要使用該函數,創建一個使用該函數的`BEFORE INSERT` (或者可選擇的`BEFORE INSERT OR UPDATE`) 觸發器。 指定兩個觸發器參數:要被修改的整數字段的名字,和將要填充值的序列對象名。 (實際上,可以指定任意數量的這樣的名字對,如果想要更新多個自增字段。) 在`autoinc.example`中有一個示例。 ## F.34.4\. insert_username — 追蹤誰改變了表的函數 `insert_username()`是一個存儲當前用戶名到一個文本字段的觸發器。 這對于追蹤誰最后修改了表中指定的行是有用的。 要使用該函數,創建一個使用該函數的`BEFORE INSERT`和/或`UPDATE`觸發器。 指定一個觸發器參數:要修改的文本字段名。 在`insert_username.example`中有一個示例。 ## F.34.5\. moddatetime — 追蹤最后修改時間的函數 `moddatetime()`是一個存儲當前時間到`timestamp`字段的觸發器。 這對于追蹤一個表中指定的行的最后修改時間是有用的。 要使用該函數,創建一個使用這個函數的`BEFORE UPDATE`觸發器。 指定一個觸發器參數:要修改的字段名。該字段必須是`timestamp` 或`timestamp with time zone`類型。 在`moddatetime.example`中有一個示例。
                  <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>

                              哎呀哎呀视频在线观看