Postgresql
在不同的數據中心從 Postgres 8.4 遷移到 9.4
我正在嘗試將巴西機器中的 Postgres 8.4 數據庫遷移到北弗吉尼亞州的 Amazon RDS Postgres 9.4。
數據庫使用編碼
LATIN1
、表空間pg_default
、lc_collate 和 lc_ctypeC
。
- 當 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'
訪問任何數據之前在連接時將此參數設置為。