PG::Error: ERROR: new encoding (UTF8) is incompatible
Ok, below steps resolved the problem:
First, we need to drop template1. Templates can’t be dropped, so we first modify it so t’s an ordinary database:
UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';
Now we can drop it:
DROP DATABASE template1;
Now its time to create database from template0, with a new default encoding:
CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE';
Now modify template1 so it’s actually a template:
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';
Now switch to template1 and VACUUM FREEZE the template:
\c template1
VACUUM FREEZE;
Problem should be resolved.
Make sure you have the correct setup in your database.yml
file. You should use template0
, as the error suggests:
test: adapter: postgresql encoding: unicode database: your_db_name template: template0 host: localhost ...
If you use Debian, when you install the postgresql package it will use your default locale to create the template1 database. If you have not configured your OS to use UTF-8 as a default locale, you will encounter this error.
In addition to the above solutions, if you are on a new installation and have no active databases, you can remove the postgresql package and set your default locale to UTF-8. The advantage of this method is you can omit locale information when creating databases in the future.
dpkg-reconfigure locales
If you don't see the desired locale, install the locales-all package
apt-get install locales-all
Then remove postgresql
apt-get remove --purge postgresql-<version>
Then reinstall or better yet upgrade to a recent release that isn't in Debian stable.