Ubuntu – Postgresql 9.2 “invalid locale name” on Ubuntu 12.04

postgresqlUbuntuubuntu-12.04

Today I installed Postgresql 9.2 on Ubuntu precise via apt.postgresql.org – all was relatively painless until I got stuck in a "invalid locale name: it_IT.utf8" error:

root@ubuntu:/tmp# sudo -u postgres psql -Xc "CREATE DATABASE test TEMPLATE template0 ENCODING 'utf8' LC_CTYPE='it_IT.utf8'"
ERROR:  invalid locale name: "it_IT.utf8"

I did run locale-gen it_IT.utf8 though, and in fact:

root@ubuntu:/tmp# locale -a
C
C.UTF-8
en_GB.utf8
en_US.utf8
it_IT.utf8
POSIX

Logs don't seem to have any meaningful information on why postgres isn't recognizing it_IT.utf8… can you help?

Best Answer

If PostgreSQL hasn't been restarted after the new locale has been created, that would be the reason. service postgresql restart should suffice.

This is presumably due to how locales are implemented in Linux libc. The new locales don't get seamlessly imported into the environment of already running processes.