<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 42.7\. 后臺PL/Perl ## 42.7.1\. 配置 本節列出影響PL/Perl的配置參數。 `plperl.on_init` (`string`) 指定當Perl觸發器第一次初始化時執行Perl代碼,在這之前是專業為了`plperl`或 `plperlu`使用的。當這段代碼執行時SPI函數是不適用的。如果代碼因錯誤而失敗, 那么它將退出解釋器的初始化,并且傳播錯誤到調用的查詢,導致當前事務或子事務退出。 Perl代碼限制為單個字符串。更長的代碼可以放入一個模塊,并且由`on_init`字符串加載。例子: ``` plperl.on_init = 'require "plperlinit.pl"' plperl.on_init = 'use lib "/my/app"; use MyApp::PgInit;' ``` 任何由`plperl.on_init`直接或非直接加載的模塊,都將適用于`plperl`使用。 這可能會創建一個安全風險。要查看哪個模塊被加載了可以使用: ``` DO 'elog(WARNING, join ", ", sort keys %INC)' LANGUAGE plperl; ``` 如果plperl庫包含在[shared_preload_libraries](#calibre_link-576)里面,那么初始化將在postmaster中發生, 這種情況下要額外考慮postmaster不穩定的風險。利用這一特性的首要原因是Perl模塊通過`plperl.on_init` 加載需要在postmaster啟動的情況下,并且在個人的數據庫會話中不會有額外開銷加載,立即可用。然而, 請記住,額外開銷只是在第一次Perl解釋器被數據庫會話使用的時候避免, 也就是PL/PerlU或PL/Perl是調用PL/Perl函數的第一個SQL角色。 在一個數據庫會話中創建的任何額外的Perl解釋器必須重新執行`plperl.on_init`。同樣,在Windows上, 從預加載中不會有任何節省,因為在postmaster進程中創建的Perl解釋器不會傳播到子進程。 這個postmaster只能在`postgresql.conf`文件或服務器命令行中設置。 `plperl.on_plperl_init` (`string`) `plperl.on_plperlu_init` (`string`) 這些參數指定當Perl解釋器專門分別為`plperl`或`plperlu`時執行Perl代碼。 當PL/Perl或PL/PerlU函數在一個數據庫會話中第一次執行時會發生這種情況, 或當一個額外的解釋器因為其他語言的調用或一個PL/Perl函數被一個新的SQL角色調用而創建時, 也會發生這種情況。這遵循任何由`plperl.on_init`所做的初始化。 當執行Perl代碼時無法使用SPI函數。在`plperl.on_plperl_init`里面的Perl代碼在 "鎖定"解釋器后執行,并且因此只能執行信任的操作。 如果代碼因錯誤而失敗,那么它將退出解釋器的初始化,并且傳播錯誤到調用的查詢,導致當前事務或子事務退出。 任何Perl已經做的動作不會回滾;但是,那個解釋器將不會再使用。如果語言再次被使用, 那么初始化將在一個新的Perl解釋器中嘗試。 只有超級用戶可以改變這些設置。盡管這些設置可以在一個會話中改變, 但是這些改變將不會影響到已經用來執行函數的Perl解釋器。 `plperl.use_strict` (`boolean`) 當設置PL/Perl函數的真實的后續編譯時,將啟用`strict`編譯指示。 這個參數不影響已經用當前會話編譯過的函數。 ## 42.7.2\. 限制及缺少的特性 下面的特性目前還在 PL/Perl 里面缺少,但是歡迎貢獻。 * PL/Perl 函數無法相互直接調用。 * SPI 目前尚未完全實現。 * 如果你用`spi_exec_query`抓取非常大的數據集,你應該明白這些數據都會放到內存里。 你可以用前面演示的`spi_query`/`spi_fetchrow`來避免這些。 類似的問題也會發生在一個返回集合的函數用`return` 給 PostgreSQL 傳遞回去一個巨大的行集合。你也可以像前面演示的那樣用`return_next` 返回每個返回行的方法避免這個問題。 * 當一個會話正常結束時,不是因為一個致命的錯誤而結束,執行任何已經定義的`END`塊。 當前沒有其他動作執行。特別的,文件句柄不自動刷新并且對象不自動銷毀。
                  <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>

                              哎呀哎呀视频在线观看