PostgreSQL UTF-8 Dil Kodu Ayarlaması

Ubuntu üstüne kurulu PostgreSQL 9.3’te UTF-8 veritabanı oluşturmaya çalışınca hata veriyorsa aşağıdaki yollar izlenebilir.

postgres=# create database travego encoding 'utf8';  
ERROR: encoding "UTF8" does not match locale "en_US"  
DETAIL: The chosen LC_CTYPE setting requires encoding "LATIN1".  
travego@mercedes ~ $ sudo locale-gen en_US.UTF-8  
travego@mercedes ~ $ sudo vim /etc/default/locale  
LANG=en_US.UTF-8  
LANGUAGE=  
LC_CTYPE="en_US.UTF-8"  
LC_NUMERIC="en_US.UTF-8"  
LC_TIME="en_US.UTF-8"  
LC_COLLATE="en_US.UTF-8"  
LC_MONETARY="en_US.UTF-8"  
LC_MESSAGES="en_US.UTF-8"  
LC_PAPER="en_US.UTF-8"  
LC_NAME="en_US.UTF-8"  
LC_ADDRESS="en_US.UTF-8"  
LC_TELEPHONE="en_US.UTF-8"  
LC_MEASUREMENT="en_US.UTF-8"  
LC_IDENTIFICATION="en_US.UTF-8"  
LC_ALL="en_US.UTF-8"  

Sunucu yeniden başlatılır ve yeni bir PostgreSQL cluster oluşturulur.

travego@mercedes ~$ sudo pg_createcluster -d /var/lib/postgresql/9.3/main/ -l /tmp/log --start-conf auto 9.3 main  
Creating new cluster 9.3/main ... config /etc/postgresql/9.3/main data /var/lib/postgresql/9.3/main  
locale en_US.UTF-8 port 5432  

Dil kodlaması UTF-8 olmayan, önceden oluşturulmuş bir PostgreSQL cluster’ı silmek için “pg_dropcluster 9.3 main” komutu kullanılarak silinebilir.

Not: “main” olarak geçen cluster ismi farklı bir isimle yaratılmış olabilir buna dikkat etmek gerek yoksa yanlış bir PostgreSQL cluster’ı silinebilir.

Erkin Çakar

PostgreSQL DBA & Software developer