![](/img/trans.png)
[英]MySQL to PostgreSQL table create conversion - charset and collation
[英]Azure PostgreSQL Server Service Collation Create Error
我正在嘗試將我當前的現有數據庫導入到 Azure PostgreSQL 服務器上運行的 postgre 實例
我已經將我的 azure postgresql 服務器參數配置為使用 UTF8 編碼(我不確定它是否在不重啟的情況下應用,但即使我沒有重啟它的選項)
我正在嘗試使用以下命令執行此操作:
sudo -u postgres pg_dump --encoding="UTF-8" --no-owner DBNAME | psql --host=xxx.postgres.database.azure.com --port=5432 --username=xxx@yyy --dbname=DBNAME
但是,它收到了這樣的錯誤:
錯誤:無法創建區域設置“en_US.utf8”:沒有錯誤
我深入這個過程並嘗試使用 UTF8(而不是 UTF-8)和其他選項運行它,但每次都會出現相同的錯誤。
我創建了一個轉儲文件來檢查內容,生成此錯誤的行是:
CREATE COLLATION "en_US.utf8" (lc_collate = 'en_US.utf8', lc_ctype = 'en_US.utf8');
這是導致該錯誤的原因。 我嘗試在 Azure postgre 實例上手動執行它,我也遇到了同樣的錯誤。
順便說一下,我已經使用以下 SQL 從控制台創建了該數據庫:
create database "DBNAME" with owner=xxx encoding='UTF-8' template template0;
我也嘗試了其他選項來創建和導入,但它們都不起作用。
有人能幫我嗎?
我用這個命令解決了我的問題:
sudo -u postgres pg_dump -Fp —no-owner DBNAME |sed “/COLLATE/s/en_US.utf8/English_United States.1252/ig”|sed "/CREATE COLLATION/s/en_US.utf8/English_United States.1252/ig"|psql --host=aaa.postgres.database.azure.com --port=5432 --username=xxx@yyy --dbname=DBNAME
問題來自服務器操作系統差異。 我當前的 PostgreSQL 服務器使用的是 Ubuntu,但 Azure PostgreSQL 服務器使用的是 Windows,因此整理名稱略有不同。
CREATE COLLATION
創建一個獨立於操作系統的名稱,可用於引用操作系統區域設置(在查詢等中)。
這里lc_collate = 'en_US.utf8'
和lc_ctype = 'en_US.utf8'
指的是 Linux 操作系統區域設置,它們在 Windows 上的命名不同,Azure PostgreSQL 使用這些區域設置(它們在 MacOS 上也不同)。
在 Windows 上,這應該可以工作
CREATE COLLATION "en_US.utf8" (lc_collate = 'English_United States', lc_ctype = 'English_United States');
而在 MacOS 上,
CREATE COLLATION "en_US.utf8" (lc_collate = 'en_US', lc_ctype = 'en_US');
但是大多數時候,您不想使用CREATE COLLATION
創建自己的排序規則,而可以只使用 PostgreSQL 中預先包含的排序規則。 通常,使用pg_dump
創建的轉儲不包含任何CREATE COLLATION
語句,因為您沒有自己創建任何語句。
除非您對排序規則進行特殊處理,否則是否可以刪除那些特定於架構的排序規則,以便它們不會包含在轉儲中?
我們之前在運行 Atlassian 的 Confluence 時遇到過同樣的問題。 由於不正確的整理類型,應用程序不會啟動。 我們可以通過直接分配English_United States.1252
來解決。
CREATE DATABASE db
WITH ENCODING 'UTF8'
LC_COLLATE 'English_United States.1252'
LC_CTYPE 'English_United States.1252'
TEMPLATE template0
OWNER conf;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.