当您创建一个新的 postgresql 集群时,您可以为该集群指定一个编码,但我不确定如何在创建集群后检索它。
我已经看到\encoding
您可以看到编码,但我不知道这是集群的编码还是客户端的编码。
我还看到,\l
我可以看到每个数据库使用的编码。
并SHOW server_encoding
显示另一种编码。
在初始化期间查询使用的值的正确方法是什么?
答案1
集群中的每个数据库都可以有自己的编码,尽管这对大多数人来说可能没用。
创建集群时,您指定的编码将用于 template1 和 postgres 数据库,因此它是所有新数据库的默认编码。不过,您可以使用不同的编码从 template0 创建新数据库。
\encoding
显示客户端<->服务器通信协议使用的编码,相当于show client_encoding
。server_encoding
显示当前连接到的数据库使用的编码。如果您连接到 template1,它应该显示用于创建集群的编码。每个数据库的编码列在中pg_database
,例如:应该
select datname, pg_encoding_to_char(encoding) from pg_database
答案2
您可以使用 pg_controldata:pg_controldata <path/to/cluster> |grep LC_
其中路径是您的集群所在的位置。
这将输出类似这样的内容:
LC_COLLATE: en_US.UTF-8
LC_CTYPE: en_US.UTF-8