如何在Azure PostgreSQL服务器上创建SQL_ASCII编码的数据库?
在Azure PostgreSQL中创建SQL_ASCII编码数据库的解决方案
嘿,我来帮你搞定这个问题!首先得明确一个核心点:Azure托管的PostgreSQL是受控服务,咱们没有权限修改template1这个系统模板数据库——这就是你本地能正常执行的修改template1步骤,在Azure上完全行不通的原因,Azure限制了这类系统级操作,避免破坏服务的稳定性。
你收到的错误提示其实已经给出了正确方向:用template0作为模板来创建数据库。你只需要调整CREATE DATABASE语句,加上TEMPLATE template0参数即可,具体语句如下:
CREATE DATABASE sipis OWNER sipis ENCODING 'SQL_ASCII' LC_COLLATE 'C' LC_CTYPE 'C' TEMPLATE template0;
为啥这个方案能行?因为template0是一个干净的、不带任何用户自定义对象的基础模板数据库,它允许咱们指定和默认编码不同的格式;而template1默认继承了服务器的UTF8编码,在Azure环境下根本没法修改它的编码或者重建它。
另外你提到修改client_encoding参数没用,这很正常——这个参数只负责客户端和服务器之间的数据传输编码,和数据库本身的创建编码完全没关系,所以当然解决不了你的问题。
最后再给你捋一遍可行的操作:
- 直接执行上面那个带
TEMPLATE template0的CREATE DATABASE语句就行,不用碰任何系统模板 - 确保你使用的sipis用户拥有创建数据库的权限(比如具备CREATEDB权限或者是超级用户)
内容的提问来源于stack exchange,提问作者Matthew Knill
相关产品推荐
相关产品推荐

