Я установил postgresql-9.2.4
из источника, теперь в приложении rails, когда я выполняю:
rake db:create
команду я получаю:
$ bin/rake db:create RAILS_ENV="test"
PG::Error: ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII)
HINT: Use the same encoding as in the template database, or use template0 as template.
: CREATE DATABASE "verticals_test" ENCODING = 'unicode'
/home/vagrant/my-project/.gems/ruby/1.9.1/gems/activerecord-3.2.12/lib/active_record/connection_adapters/postgresql_adapter.rb:652:in `exec
....
bin/rake:16:in `load'
bin/rake:16:in `<main>'
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "database"=>"my_db", "host"=>"localhost", "pool"=>5, "username"=>"my_user", "password"=>"my_password"}
Есть идеи?
sudo -u postgres psql postgres
для debian или аналогичной ОС.Убедитесь, что в вашем
database.yml
файле правильные настройки . Вы должны использоватьtemplate0
, как подсказывает ошибка:test: adapter: postgresql encoding: unicode database: your_db_name template: template0 host: localhost ...
источник
template0
в конфиге не было, если разместить, то получу:PG::Error: ERROR: permission denied to copy database "template0" : CREATE DATABASE "my_database_test" ENCODING = 'unicode' TEMPLATE = "template0"
development
env так же ведет себя ?Если вы используете Debian, при установке пакета postgresql он будет использовать ваш языковой стандарт по умолчанию для создания базы данных template1. Если вы не настроили свою ОС для использования UTF-8 в качестве языкового стандарта по умолчанию, вы столкнетесь с этой ошибкой.
В дополнение к приведенным выше решениям, если вы используете новую установку и у вас нет активных баз данных, вы можете удалить пакет postgresql и установить локаль по умолчанию на UTF-8. Преимущество этого метода в том, что вы можете опускать информацию о локали при создании баз данных в будущем.
dpkg-reconfigure locales
Если вы не видите желаемый языковой стандарт, установите пакет locales-all.
apt-get install locales-all
Затем удалите postgresql
apt-get remove --purge postgresql-<version>
Затем переустановите или, еще лучше, обновите до последней версии, которой нет в стабильной версии Debian .
источник
Что касается меня, я просто меняю строку с
database.yml
:encoding: unicode
кому:
encoding: SQL_ASCII
просто так и все работает.
источник
Если ваша установка postgres новая и вы еще не заполнили никакие базы данных, вы можете удалить свой
data
каталог и повторно запустить команду initdb с флагом для создания баз данных с использованием UTF-8.Измените эту команду, чтобы она соответствовала вашей установке postgres.
-E
Флаг указывает , что кодировка должна быть по умолчанию. Другие кодировки символов перечислены здесь ./usr/local/pgsql/bin/initdb -E UTF8 -D /usr/local/pgsql/data -U postgres
Он должен выдать ошибку и сообщить вам, что
data
каталог не пуст. Следуйте инструкциям и удалите каталог, затем повторно запустите команду. (Или удалитеdata
каталог перед тем, как начать, но всегда приятно увидеть инструкции самостоятельно.)источник
У меня была аналогичная проблема. Моя database.yml была такой: -
default: &default adapter: postgresql encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default database: chatapp_development test: <<: *default database: chatapp_test production: <<: *default database: chatapp_production username: chatapp password: <%= ENV['CHATAPP_DATABASE_PASSWORD'] %>
Я добавил template: template0 в настройки по умолчанию
default: &default adapter: postgresql template: template0 encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
И это сработало
источник
template: template0
ДОЛЖЕН появиться раньше,encoding: unicode
чем кажется.