Когда вы создаете новый кластер postgresql, вы можете указать кодировку для кластера, но я не уверен, что знаю, как получить ее после создания кластера.
Я видел это с \encoding
вы можете увидеть кодировку, но я не знаю, это кодировка кластера или кодировка клиента.
Я также видел это с \l
Я вижу кодировку, используемую каждой базой данных.
И SHOW server_encoding
показывает другую кодировку.
Как правильно запросить значение, используемое во время инициализации?
Каждая база данных в кластере может иметь свою собственную кодировку, хотя для большинства людей это, вероятно, бесполезно.
При создании кластера указанная вами кодировка используется для баз данных template1 и postgres, поэтому она используется по умолчанию для всех новых. Однако вы можете создать новую базу данных из template0 в другой кодировке.
\encoding
показывает кодировку, используемую для протокола связи клиент <-> сервер, и эквивалентна show client_encoding
. server_encoding
показывает кодировку, используемую для базы данных, к которой вы в данный момент подключены. Он должен показать кодировку, используемую для создания кластера, если вы подключены к template1. Кодировка для каждой базы данных указана в pg_database
, например: следует
select datname, pg_encoding_to_char(encoding) from pg_database
Вы можете использовать pg_controldata: pg_controldata <path/to/cluster> |grep LC_
где путь - это место, где находится ваш кластер.
Это будет примерно так:
LC_COLLATE: en_US.UTF-8
LC_CTYPE: en_US.UTF-8