Azure PostgreSQL 服务器服务排序规则创建错误
Azure PostgreSQL Server Service Collation Create Error
我正在尝试将我当前现有的数据库导入到 运行ning on Azure PostgreSQL Server
的 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
但是它会出现类似这样的错误:
ERROR: could not create locale "en_US.utf8": No error
我深入研究了这个过程并尝试 运行 使用 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;
我也尝试了其他选项来创建和导入,但没有一个有效。
有人可以帮助我吗?
CREATE COLLATION
创建一个独立于操作系统的名称,可用于引用 OS 语言环境(在查询等中)。
此处 lc_collate = 'en_US.utf8'
和 lc_ctype = 'en_US.utf8'
指的是 Linux 操作系统区域设置,它们在 Azure PostgreSQL 使用的 Windows 上的命名不同(它们在MacOS,也是)。
在 Windows 上,这应该有效
CREATE COLLATION "en_US.utf8" (lc_collate = 'English_United States', lc_ctype = 'English_United States');
在 Mac 上OS,
CREATE COLLATION "en_US.utf8" (lc_collate = 'en_US', lc_ctype = 'en_US');
但大多数时候,您不想使用 CREATE COLLATION
创建自己的归类,而可以只使用 PostgreSQL 中预先包含的归类。通常使用 pg_dump
创建的转储不包含任何 CREATE COLLATION
语句,因为您自己没有创建任何语句。
除非您对归类做一些特殊的事情,否则是否可以删除那些特定于模式的归类,这样它们就不会包含在转储中?
我用这个命令解决了我的问题:
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
问题来自服务器 O.S。差异。我当前的 PostgreSQL 服务器正在使用 Ubuntu,但 Azure PostgreSQL 服务器正在使用 windows,因此整理名称略有不同。
我们之前 运行 遇到过同样的问题 运行ning 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;
我正在尝试将我当前现有的数据库导入到 运行ning on Azure PostgreSQL Server
的 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
但是它会出现类似这样的错误:
ERROR: could not create locale "en_US.utf8": No error
我深入研究了这个过程并尝试 运行 使用 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;
我也尝试了其他选项来创建和导入,但没有一个有效。
有人可以帮助我吗?
CREATE COLLATION
创建一个独立于操作系统的名称,可用于引用 OS 语言环境(在查询等中)。
此处 lc_collate = 'en_US.utf8'
和 lc_ctype = 'en_US.utf8'
指的是 Linux 操作系统区域设置,它们在 Azure PostgreSQL 使用的 Windows 上的命名不同(它们在MacOS,也是)。
在 Windows 上,这应该有效
CREATE COLLATION "en_US.utf8" (lc_collate = 'English_United States', lc_ctype = 'English_United States');
在 Mac 上OS,
CREATE COLLATION "en_US.utf8" (lc_collate = 'en_US', lc_ctype = 'en_US');
但大多数时候,您不想使用 CREATE COLLATION
创建自己的归类,而可以只使用 PostgreSQL 中预先包含的归类。通常使用 pg_dump
创建的转储不包含任何 CREATE COLLATION
语句,因为您自己没有创建任何语句。
除非您对归类做一些特殊的事情,否则是否可以删除那些特定于模式的归类,这样它们就不会包含在转储中?
我用这个命令解决了我的问题:
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
问题来自服务器 O.S。差异。我当前的 PostgreSQL 服务器正在使用 Ubuntu,但 Azure PostgreSQL 服务器正在使用 windows,因此整理名称略有不同。
我们之前 运行 遇到过同样的问题 运行ning 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;