簡體   English   中英

Azure PostgreSQL 服務器服務排序規則創建錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM