পিজি :: ত্রুটি: ত্রুটি: নতুন এনকোডিং (ইউটিএফ 8) বেমানান


84

আমি 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"}

কোন ধারণা?

উত্তর:


233

ঠিক আছে, নীচের পদক্ষেপগুলি সমস্যার সমাধান করেছে:

  1. প্রথমত, আমাদের টেমপ্লেট 1 ছাড়তে হবে। টেমপ্লেটগুলি ফেলে দেওয়া যায় না, তাই আমরা প্রথমে এটি পরিবর্তন করে থাকি তাই এটি একটি সাধারণ ডাটাবেস:

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

  2. এখন আমরা এটি ফেলে দিতে পারি:

    DROP DATABASE template1;

  3. এখন নতুন ডিফল্ট এনকোডিং সহ টেমপ্লেট 0 থেকে ডাটাবেস তৈরির সময়:

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

  4. এখন টেমপ্লেট 1 সংশোধন করুন এটি আসলে টেম্পলেট:

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

  5. এখন টেমপ্লেট 1 এ সারণি করুন এবং টেমপ্লেটটি ভ্যাকুয়ামকে বিনামূল্যে মুক্ত করুন:

    \c template1

    VACUUM FREEZE;

সমস্যা সমাধান করা উচিত।


4
@ টোকি এটি কাজ করছে সমাধান। আমি পোগ্রগ্রেকএল এর জন্য খুব বেশি পরিচিত না তবে আমার একমাত্র ছোট পদক্ষেপ 0: sudo -u postgres psql postgresডেবিয়ান বা অনুরূপ ওএসের জন্য।
ক্রোনাক্স

42

আপনার 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"
তোখি

এটা আশ্চর্যজনক ... এটা developmentenv জন্য একই আচরণ করে ?
মিহাই

4
টেমপ্লেট ০ এবং টেমপ্লেট ১ এর মধ্যে যে কেউ এই পার্থক্যটি ব্যাখ্যা করতে পারে?
জেক

@ জেক postgresql.org/docs/10/static/manage-ag-templatedbs.html দেখুন - এই পৃষ্ঠাটি পড়ার পরে সমস্ত কিছু বোধগম্য হয় :-)
মার্কাস

12

আপনি যদি ডেবিয়ান ব্যবহার করেন, আপনি যখন পোস্টগ্র্যাসকিএল প্যাকেজ ইনস্টল করেন এটি টেমপ্লেট 1 ডাটাবেস তৈরি করতে আপনার ডিফল্ট লোকেল ব্যবহার করবে। আপনি যদি নিজের ওএসটিকে ডিফল্ট লোকেল হিসাবে ইউটিএফ -8 ব্যবহার করতে কনফিগার না করে থাকেন তবে আপনি এই ত্রুটির মুখোমুখি হবেন।

উপরের সমাধানগুলি ছাড়াও, যদি আপনি একটি নতুন ইনস্টলিংয়ে থাকেন এবং কোনও সক্রিয় ডাটাবেস না রাখেন, আপনি পোস্টগ্র্যাসকিএল প্যাকেজটি সরিয়ে আপনার ডিফল্ট লোকেলটি ইউটিএফ -8 এ সেট করতে পারেন। এই পদ্ধতির সুবিধা হ'ল আপনি ভবিষ্যতে ডেটাবেস তৈরি করার সময় লোকেল তথ্য বাদ দিতে পারেন।

dpkg-reconfigure locales

যদি আপনি পছন্দসই লোকেল না দেখেন তবে লোকেল-সমস্ত প্যাকেজটি ইনস্টল করুন

apt-get install locales-all

তারপরে postgresql মুছে ফেলুন

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

তারপরে পুনরায় ইনস্টল করুন বা আরও ভাল আপলোড করুন সাম্প্রতিক প্রকাশে যা ডেবিয়ান স্থিতিশীল নয়


4
আমি আমার ডিফল্ট লোকেলটি en_US.UTF-8 এ সেট করেছি এবং পোস্টগ্রাগগুলি পুনরায় ইনস্টল করার জন্য আপনার নির্দেশাবলী অনুসরণ করেছি এবং এর পরেও একই ত্রুটি পেয়েছি।
সাইমন উডসাইড

সাইমন এর সাথে একমত। কি সময় নষ্ট :(
কর্নি

লোকেল ইনস্টল করার পরে, এটি
যাদুটির

6

আমার হিসাবে, আমি কেবল এ থেকে লাইনটি পরিবর্তন করেছি database.yml:

encoding: unicode

প্রতি:

encoding: SQL_ASCII

শুধু যে এবং এটি সব কাজ করে।


4
এটি গ্রহণযোগ্য সমাধানের চেয়ে ভাল তবে আমি এই স্টাফটিতে নতুন তাই আমি এসকিউএল_এএসসিআইআইতে ইউনিকোড পরিবর্তনের প্রভাব সম্পর্কে সচেতন হতে পারি না।
indieNik

4
এসকিউএল_এএসসিআইআই ব্যবহার করা কোনও দুর্দান্ত ডিফল্ট নয়।
ডগ

5

যদি আপনার পোস্টগ্রিগের ইনস্টলেশনটি নতুন হয় এবং আপনি এখনও কোনও ডেটাবেস পপুলেশন করেন নি, তবে আপনি নিজেরটি মুছে ফেলতে পারেন data পপুলেশন করেন ডিরেক্টরিটি এবং ইউটিএফ -8 ব্যবহার করে ডাটাবেস তৈরি করতে পতাকাটি দিয়ে initdb কমান্ডটি আবার চালাতে পারেন।

আপনার পোস্টগ্রিগের ইনস্টলেশনটি মেলে এই কমান্ডটি সংশোধন করুন। -Eপতাকা বলে কি অক্ষর এনকোডিং ডিফল্ট হওয়া উচিত। অন্যান্য অক্ষর এনকোডিং এখানে তালিকাভুক্ত করা হয়

/usr/local/pgsql/bin/initdb -E UTF8 -D /usr/local/pgsql/data -U postgres

এটি ত্রুটিযুক্ত এবং আপনাকে বলতে হবে যে dataডিরেক্টরিটি খালি নয় not নির্দেশাবলী অনুসরণ করুন এবং ডিরেক্টরি মুছে ফেলুন, তারপরে কমান্ডটি আবার চালান। (অথবা, dataডিরেক্টরি শুরু করার আগে ডিরেক্টরিটি সরিয়ে ফেলুন তবে নিজের নির্দেশাবলী দেখে সর্বদা ভালো লাগবে))


2

আমারও একি দশা. আমার ডাটাবেস.আইএমএলটি এরকম ছিল: -

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'] %>

আমি ডিফল্ট সেটিংসে টেমপ্লেট: টেমপ্লেট 0 যুক্ত করেছি

default: &default
  adapter: postgresql
  template: template0
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

এবং এটা কাজ করে


আহ, আদেশ গুরুত্বপূর্ণ! মনে template: template0 হবে আগে আসবে encoding: unicode
ড্যান বেচার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.