[ruby-on-rails] PG :: Error : ERROR : 새 인코딩 (UTF8)이 호환되지 않습니다.

postgresql-9.2.4소스에서 설치 했으며 이제 레일스 앱에서 실행할 때 :

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"}

어떤 생각?



답변

네, 아래 단계로 문제가 해결되었습니다.

  1. 먼저 template1을 삭제해야합니다. 템플릿은 삭제할 수 없으므로 먼저 일반 데이터베이스가되도록 수정합니다.

    UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';

  2. 이제 드롭 할 수 있습니다.

    DROP DATABASE template1;

  3. 이제 새로운 기본 인코딩을 사용하여 template0에서 데이터베이스를 만들 차례입니다.

    CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE';

  4. 이제 실제로 템플릿이되도록 template1을 수정합니다.

    UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';

  5. 이제 template1로 전환하고 템플릿을 VACUUM FREEZE :

    \c template1

    VACUUM FREEZE;

문제가 해결되어야합니다.


답변

database.yml파일에 올바른 설정이 있는지 확인하십시오 . template0오류에서 알 수 있듯이을 사용해야 합니다.

test:
  adapter: postgresql
  encoding: unicode
  database: your_db_name
  template: template0
  host: localhost
  ...


답변

Debian을 사용하는 경우 postgresql 패키지를 설치할 때 기본 로케일을 사용하여 template1 데이터베이스를 생성합니다. 기본 로케일로 UTF-8을 사용하도록 OS를 구성하지 않은 경우이 오류가 발생합니다.

위의 솔루션 외에도 새로 설치 중이고 활성 데이터베이스가없는 경우 postgresql 패키지를 제거하고 기본 로케일을 UTF-8로 설정할 수 있습니다. 이 방법의 장점은 나중에 데이터베이스를 만들 때 로캘 정보를 생략 할 수 있다는 것입니다.

dpkg-reconfigure locales

원하는 로케일이 표시되지 않으면 locales-all 패키지를 설치하십시오.

apt-get install locales-all

그런 다음 postgresql을 제거하십시오.

apt-get remove --purge postgresql-<version>

그런 다음 다시 설치하거나 더 나은 방법 으로 Debian stable이 아닌 최신 릴리스로 업그레이드하십시오 .


답변

저에 관해서는 다음과 같이 라인을 변경합니다 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 } %>

그리고 그것은 일했습니다


답변