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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # pg_upgrade ## Name pg_upgrade?--?升級 PostgreSQL 數據庫實例 ## Synopsis `pg_upgrade` `-b` `_oldbindir_` `-B` `_newbindir_` `-d` `_olddatadir_` `-D` `_newdatadir_` [`_option_`...] ## 描述 pg_upgrade (原名稱為 pg_migrator) 允許數據在 PostgreSQL 數據文件中升級到PostgreSQL新的 大版本而不需要數據的備份/還原,通常適用在升級大版本時,例如從8.4.7升級到當前 PostgreSQL的新最新版本。 在小版本之間升級往往是不需要的, 例如 從9.0.1升級到9.0.4。 PostgreSQL大版本更新會定期增加新的功能,這往往導致系統表結構布局經常 改變,但是內部的數據的存儲格式很少改動。 針對這種情況 pg_upgrade 通過建立新的系統表和簡易的利用舊的用戶 數據文件高效的完成升級。如果未來一個新的主要版本改變了數據存儲 結構這將導致舊數據結構無法讀取, pg_upgrade 將不能 完成升級。(社區會試圖避免這種情況的發生。) pg_upgrade能很好的完成新舊實例的二進制兼容,例如包括 32/64二進制的兼容性編譯時間設置檢查。檢查任何一個外部模塊的二進制兼容 是很有必要的,然而不能通過 pg_upgrade來檢查。 pg_upgrade 支持從8.3.X升級到最近的 PostgreSQL主要發行版本, 包括快照和alpha版本。 ## 選項 pg_upgrade 可以使用下面命令行參數: `-b` `_old_bindir_``--old-bindir=``_old_bindir_` 舊的數據實例的可執行文件目錄; 環境變量 `PGBINOLD` `-B` `_new_bindir_` `--new-bindir=``_new_bindir_` 新的數據實例的可執行文件目錄; 環境變量 `PGBINNEW` `-c` `--check` 僅檢查實例,不做任何數據更新 `-d` `_old_datadir_` `--old-datadir=``_old_datadir_` 舊的群集數據目錄;環境變量`PGDATAOLD` `-D` `_new_datadir_` `--new-datadir=``_new_datadir_` 新的群集數據目錄;環境變量`PGDATANEW` `-j` `--jobs` 同時使用的進程或者線程數 `-k` `--link` 使用硬鏈接替代拷貝文件到新的數據庫實例 (在windows使用NTFS的接點) `-o` `_options_` `--old-options` `_options_` options to be passed directly to the old `postgres` command `-O` `_options_` `--new-options` `_options_` options to be passed directly to the new `postgres` command `-p` `_old_port_number_` `--old-port=``_old_portnum_` 舊數據庫實例的端口;環境變量`PGPORTOLD` `-P` `_new_port_number_` `--new-port=``_new_portnum_` 新數據庫實例的端口;環境變量`PGPORTNEW` `-r` `--retain` 即使在升級成功也保存相關的SQL和日志文件。 `-u` `_user_name_` `--user=``_user_name_` 數據實例的超級管理員名; 環境變量 `PGUSER` `-v` `--verbose` 啟用詳細的內部日志信息 `-V` `--version` 打印版本信息,然后退出 `-?` `-h` `--help` 顯示當前幫助,然后退出 ## 用法 用 pg_upgrade進行升級的步驟: 1. **選擇性的移動實例的安裝目錄** 如果你用了指定版本的安裝目錄,例如 `/opt/PostgreSQL/9.1`, 你不需要再移動 舊的安裝目錄。圖形化安裝工具都是指定安裝目錄的。 如果你的安裝目錄不是版本指定的,例如 `/usr/local/pgsql`, 這就有必要 移動當前的安裝目錄,這樣就避免影響了新的 PostgreSQL 的安裝。 當 PostgreSQL 數據庫服務停止后, 重命令PostgreSQL的安裝 目錄的操作是安全的;假如舊安裝目錄是 `/usr/local/pgsql`, 你可以用命令: ``` mv /usr/local/pgsql /usr/local/pgsql.old ``` 來重命令當前目錄名。 2. **用源碼安裝,構建一個新的版本** 用兼容舊的數據庫實例`configure` 選項來構建新的PostgreSQL。在開始升級之前 pg_upgrade 將會檢查`pg_controldata` 來確保所有的設置都兼容。 3. **安裝新的二進制文件** 安裝新服務器的二進制可執行文件和支持文件。 用源碼安裝時,如果你想要在自定義目錄安裝新服務器,可以使用 `prefix` 變量: ``` gmake prefix=/usr/local/pgsql.new install ``` 4. **Install pg_upgrade and pg_upgrade_support** 在新PostgreSQL的安裝中,安裝 pg_upgrade 二進制文件 and pg_upgrade_support庫文件 。 5. **初始化新的數據庫實例** 使用`initdb`命令初始化新的數據庫實例。 并且,要用兼容的舊數據庫實例的`initdb` 選項 。 很多預構建安裝會自動完成這一部。不需要去啟動新的數據庫實例。 6. **安裝自定義的共享對象文件** 安裝所以舊數據庫實例用到的自定義共享對象文件(或者是DLL文件), 例如 `pgcrypto.so`, 無論他們來自 `contrib` 或者其它的源。 不需要安裝一類模式的定義, 例如`pgcrypto.sql`, 因為這些也會從舊數據庫實例中升級。 7. **調整連接認證** `pg_upgrade` 會數次連到新舊數據庫實例,所以你修改 `pg_hba.conf`,可以把認證設置成 `trust` 或者是 `peer` ,另外也可以使用 `md5` 的認證方式, 同時使用 `~/.pgpass`密碼文件 (參考 [Section 31.15](#calibre_link-457)). 8. **停止新舊數據庫** 確保兩個數據庫都停止使用, 在類Unix操作系統中使用 例如: ``` pg_ctl -D /opt/PostgreSQL/8.4 stop pg_ctl -D /opt/PostgreSQL/9.0 stop ``` 在Windows中,使用windows可用的服務名: ``` NET STOP postgresql-8.4 NET STOP postgresql-9.0 ``` 或者 ``` NET STOP pgsql-8.3 (8.3和更早版本的PostgreSQL 使用了不同的服務器) ``` 9. **運行 pg_upgrade** 運行新數據庫的可執行命令 pg_upgrade , 而不是舊數據庫的。 pg_upgrade 需要指定新舊數據庫實例的數據目錄和可執行的 (`bin`) 目錄。 當然你還可以指定用戶和端口,指定是否使用數據硬鏈接代替使用 數據復制(默認方式)。 如果你使用鏈接模式,升級將會非常快(沒有文件拷貝)并且占用更少的硬盤,但是你不能 再訪問你的舊數據庫當你升級完成啟動新的數據庫實例。 鏈接模式還需要新舊數據庫 數據目錄使用相同的文件系統。(表空間和 `pg_xlog` 可以在不同的 文件系統。) 參考 `pg_upgrade --help` 查看完整的幫助選項列表。 `--jobs` 選項可以在拷貝/鏈接數據文件時使用多CPU核心并且可以并行 的還原數據庫模式;一個好的值是CPU核數和表空間的最大值。在一個多核數據庫 機器上升級一個多數據庫服務器時這個選項能大量的節約時間。 For Windows users, you must be logged into an administrative account, and 對于Windows用戶來說,你必要登錄一個管理員的帳號,并且用 `postgres` 用戶來啟動一個終端設置可用的PATH ``` RUNAS /USER:postgres "CMD.EXE" SET PATH=%PATH%;C:\Program Files\PostgreSQL\9.0\bin; ``` 然后運行 pg_upgrade 帶上引號, 例如: ``` pg_upgrade.exe --old-datadir "C:/Program Files/PostgreSQL/8.4/data" --new-datadir "C:/Program Files/PostgreSQL/9.0/data" --old-bindir "C:/Program Files/PostgreSQL/8.4/bin" --new-bindir "C:/Program Files/PostgreSQL/9.0/bin" ``` 開始以后, `pg_upgrade`會驗證兩個數據庫實例是兼容的 然后開始升級。 你可以使用 `pg_upgrade --check` 去執行檢查工作,甚至是舊數據庫實例仍在運行。`pg_upgrade --check` 會概述一些自定義的調整你需要在升級后去查看。如果你使用了鏈接模式,你必需要 要用`--link`參數和`--check` 來啟用指定鏈接模式的 檢查。 `pg_upgrade` 需要對當前目錄有可寫權限。 在數據庫升級過程中不能訪問數據庫實例這是顯而易見的。pg_upgrade 默認在端口50432運行來避免預期之外的數據庫連接。當你在升級的時候你可以在 新舊數據庫實例上使用同一個端口因為新舊數據庫實例不會同時運行 然而, 當查檢舊數據庫實例時, 新舊數據庫實例的端口必需不同。 如果在還原數據庫模式時出現錯誤時, `pg_upgrade` 將會退出你必需參照 [step 14](#calibre_link-2341)的概要信息還原舊實例 再一次使用`pg_upgrade` , 你可能需要修改舊實例以讓舊數據庫模式 升級成功。如果問題出現在某個外部模塊上,你可能需要從舊實例上卸載這些外部模塊 然后在升級成功后再在新實例上安裝它們,假設模塊沒有被用于儲存用戶數據。 10. **還原 `pg_hba.conf`** 如果你修改`pg_hba.conf` 成 `trust`的方式, 還原它的原來的認證設置。 還有可能需要去調整其它的配置文件去和舊的數據庫 實例相匹配,例如。`postgresql.conf`. 11. **升級后的處理** 如果有升級后續操作需要執行,pg_upgrade會在完成后發布出警告信息。 同時它會生成由管理員運行腳本文件。 腳本會連到新舊數據庫執行后續操作。 腳本可以用下面命令執行: ``` psql --username postgres --file script.sql postgres ``` 腳本可以任意順序執行,執行完后可以被刪除。 **Caution** 通常情況下在重建腳本運行結束之前不允許訪問被引用的表;這樣做可能會出現 意想不到的錯誤結果或者是性能不佳 。不引用的表可以被立限訪問。 12. **統計** 因為優化統計結果不會被`pg_upgrade`傳遞, 你需要指定去運行命令去在升級 完成后生成一些新的信息。你可能需要設置連接參數去匹配新的數據庫實例。 13. **刪除舊的數據庫實例** 當`pg_upgrade` 成功的升級完成后,你可能要運行腳本的 方法刪除舊的數據庫實例的數據目錄你可以刪除舊安裝目錄 (例如。 `bin`, `share`)。 14. **還原到舊實例** 如果,運行`pg_upgrade`后, 你希望回復到舊實例, 下面是一些選項: * 如果你運行了加`--check` 參數的`pg_upgrade` ,不會對舊數據實例產生影響可以隨時更新實用。 * 如果你運行了加`--link`參數的 `pg_upgrade` 數據文件會被新舊數據實例所共用,如果你啟動了新數據實例,新的 數據庫會寫到那些共享文件上,這對舊實例是不安全的。 * 如果你運行了_不加_`--link`參數的 `pg_upgrade` 或者沒有啟動新的數據庫,舊實例并沒有被修改過,如果鏈接開始, `.old`后綴會出現在 `$PGDATA/global/pg_control`目錄下。 為了重新舊數據實例,可以從`$PGDATA/global/pg_control` 目錄下移除`.old`后綴的文件;然后你可以重啟舊實例。 ## 注意事項 pg_upgrade不支持包含有`reg*` 類型的OID-引用 比如 以下類型: `regproc`, `regprocedure`, `regoper`, `regoperator`, `regconfig`, and `regdictionary`. (`regtype` 可以被升級。) 所有失敗, 重建, 和重建索引會影響到你升級都會被pg_upgrade報告。 升級后的重建表和索引會自動生成。如果你嘗試自動升級多個實例,你應該找到 相同的數據模式需要相同的升級后步驟對所以的實例升級;這是因為升級后的步驟 是基于數據庫模式的,而不是用戶數據。 部署測試,可以創建一個只讀的模式從舊數據實例復制,插入一些虛擬的數據, 然后升級他們。 如果你升級PostgreSQL 9.2版本之前只用一個僅配置目錄的 的數據庫,你必要傳遞真的數據目錄給pg_upgrade,并且給數據庫傳遞配置目錄, 例如。 `-d /real-data-directory -o '-D /configuration-directory'`。 如果用一個9.1之前用了非默認的Unix域socket目錄或者默認的位置和新實例 默認位置不一致,要設置 `PGHOST`來指定舊數據庫的socket位置。 (在Windows下不需要。) 一個日志同步的數據庫([Section 25.2](#calibre_link-1133)) 不能被升級原因是 升級數據庫必需要允許寫。很簡單的方式是升級方庫然后用rsync去重新建 備份。你可以運行`rsync` 當主庫停用后,或者作為一次基礎備份 ([Section 24.3.2](#calibre_link-1632))去覆蓋舊的數據庫備份。 如果你想要用link方式并且當新實例啟動后你不想要你的舊數據庫實例數據被修改 用`rsync` 從運行中的舊實例新建一個臟的數據復制,然后關閉舊實例 再一次運行`rsync` 保證所有的數據更改保持一致的。你可能需要 排除一些文件,例如。`postmaster.pid`, 還有在 [Section 24.3.3](#calibre_link-1633)提到的文件。 ### 從PostgreSQL 8.3升級的局限性 _從_ PostgreSQL 8.3 升級有一些額外的條件沒有被提及 當升級到以后的PostgreSQL發行版本。 舉個例子,在8.3版本中如果用戶字段中 定義了: * 一個 `tsquery` 數據類型 * 數據類型`name` 并不是第一個字段pg_upgrade將不支持升級。 你必需要刪除任何這樣的字段并且手動升級他們。 如果`ltree`模塊被安裝到數據庫中,pg_upgradebu將不支持。 pg_upgrade 會需要重建表如果表: * 一個字段的數據類型是`tsvector` pg_upgrade 會需要重建索引如果: * 一個索引的類型是hash 或者 GIN * 一個使用了 `bpchar_pattern_ops`的索引 同樣的,PostgreSQL 8.3之后的版本默認的日期存儲格式更改到整型。 pg_upgrade會查檢日期存儲格式讓新舊數據庫實例匹配。確保你的新實例是構建時 configure 帶上了`--disable-integer-datetimes`參數。 對于Windows用戶,要注意的不同的整型的日期類型設置是在圖形華和MSI安裝程序中, 它僅僅可能從版本8.3的安裝版到8.4升級或者最近的安裝版。不可能從MSI安裝程序 到升級新的圖形化安裝程序中。 ## 參考 [initdb](#calibre_link-542), [pg_ctl](#calibre_link-544), [pg_dump](#calibre_link-437), [postgres](#calibre_link-1033)
                  <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>

                              哎呀哎呀视频在线观看