Postgresql

在不同的數據中心從 Postgres 8.4 遷移到 9.4

  • April 26, 2017

我正在嘗試將巴西機器中的 Postgres 8.4 數據庫遷移到北弗吉尼亞州的 Amazon RDS Postgres 9.4。

數據庫使用編碼LATIN1、表空間pg_default、lc_collat​​e 和 lc_ctype C

  • 當 Web 應用程序連接到 8.4 數據庫時,重音詞會正常顯示。

穩定的工會

  • 當我將它連接到 9.4 恢復的數據庫(使用相同的編碼、表空間、整理和 ctype 創建)時,重音詞顯示得很奇怪。

穩定的聯盟

Web 應用程序 HTML 頁面的字元集定義為iso-8559-1.

用於 pg_dump 和 restore 的命令

pg_dump --file=example --format=custom --host=exampleIP --username=exampleusername --lock-wait-timeout=5000 exampledatabase

pg_restore --dbname=exampledatabase --format=custom --host="awsRdsDns" --username=exampleusername --verbose exampleFile

我也嘗試過轉儲,--encoding=LATIN1但沒有任何改變

當我在兩個數據庫中通過 PgAdmin3 選擇這些數據時,重音詞正常顯示。

我究竟做錯了什麼?

HTML 字元集設置為 iso-8859-1。更改 HTML 字元集並沒有改變它。RDS client_encoding 是 UTF8,因為大多數數據庫使用 UTF8,只有 6 個其他數據庫使用LATIN1. 有沒有辦法只為這 6 個數據庫更改它而不影響其他數據庫?

結論

我發現我的問題是我的 Web 應用程序 CLIENT_ENCODING 是 UTF8,所以我的解決方案是將它設置為LATIN1,但是因為我的問題是針對“其他問題”的,所以我決定接受這個答案。

您可以通過以下方式設置不同於集群範圍的編碼:

CREATE DATABASE important WITH ENCODING 'LATIN1' TEMPLATE template0;

文件進一步說:

請注意,上述命令指定複製 template0 數據庫。複製任何其他數據庫時,不能從源數據庫更改編碼和區域設置,因為這可能會導致數據損壞。

所有這些都可以在創建數據庫時完成,以後沒有ALTER DATABASE語法可以更改它。

在伺服器上進行設置client_encoding可能很誘人,但您不能僅對單個數據庫進行設置,要麼全部設置,要麼不設置。一個有點醜陋的想法可能是在'UTF8'訪問任何數據之前在連接時將此參數設置為。

引用自:https://dba.stackexchange.com/questions/171823