পিজি_আপগ্রেড অস্বীকৃত কনফিগারেশন প্যারামিটার "ইউনিট_সকেট_ডাইরেক্টরি"


13

এই কমান্ডটি পোস্টগ্রিজ ব্যবহারকারী হিসাবে ব্যবহার করে আমি ফেডোরা 18-তে পোস্টগ্র্যাস্কেল 9.2 থেকে 9.3 থেকে আপগ্রেড করার চেষ্টা করছি

$ pg_upgrade -b /bin -B /usr/pgsql-9.3/bin -d /var/lib/pgsql/data -D /var/lib/pgsql/9.3/data/ -j 2 -u postgres

লগতে ত্রুটি

কমান্ড: "/ বিন / পিজি_সিটিএল" -w -l "পিজি_গ্রেড_সার্ভার.লগ" -ডি "/ ভার / লিবি / পিএসএসকিএল / ডেটা" -o "-p 50432-বি -সি লিসেন_এড্রেসেস = '' -সি ইউনিক্স_সকেট_প্রেমিশন = 0700 -সি unix_sket_directory = '/ var / lib / pgsql' "start >>" pg_upgrade_server.log "2> & 1 সার্ভার শুরু হওয়ার অপেক্ষায় .... FATAL: অপরিজ্ঞাত কনফিগারেশন প্যারামিটার" unix_sket_directory ".... অপেক্ষা করা বন্ধ pg_ctl: আরম্ভ করা গেল না সার্ভার

মন্তব্যগুলিতে a_horse দ্বারা চিহ্নিত হিসাবে 9.3.3 এ পরামিতি unix_socket_directories(বহুবচন) দ্বারা প্রতিস্থাপিত হয়েছিল । তবে সার্ভার সংস্করণটি প্রারম্ভিক 9.2:

$ /bin/pg_ctl --version
pg_ctl (PostgreSQL) 9.2.4

কোন ধারনা?


2
এই প্যারামিটারটির নাম পরিবর্তন করা হয়েছে unix_socket_directories: postgresql.org/docs/current/static/release-9-3.html#AEN114343
a_horse_with_no_name

@a_horse এই আদেশটি 9.2 সংস্করণ শুরু করার চেষ্টা করে t আপডেট হওয়া প্রশ্নটি দেখুন
ক্লোডোলোডো

আপনার বিতরণে কোন প্যারামিটার ব্যবহার করা হচ্ছে তা স্পষ্টভাবে দেখতে আপনি চালাতে পারেনpostgres --describe-config | grep -o 'unix_socket_director\w*'
র্যান্ডাল

উত্তর:


25

আমি (মূল হিসাবে) চালিয়ে সমস্যাটি হ্যাক করেছি:

mv /usr/bin/pg_ctl{,-orig}
echo '#!/bin/bash' > /usr/bin/pg_ctl
echo '"$0"-orig "${@/unix_socket_directory/unix_socket_directories}"' >> 
     /usr/bin/pg_ctl
chmod +x /usr/bin/pg_ctl

ইচ্ছানুসারে চালান pg_upgrade, তারপরে হ্যাকটি পূর্বাবস্থায় ফেরান:

mv -f /usr/bin/pg_ctl{-orig,}

সমস্যাটি হ'ল পিজি_আপগ্রেড প্রোগ্রামটি pg_ctrl যুক্তি দিয়ে কার্যকর করে যা নতুন "ইউনিক্স_সকেট_ডাইরেক্টরি" এর পরিবর্তে পুরানো "ইউনিক্স_সকেট_ডাইরেক্টরি" তে ফাইলগুলি নির্দিষ্ট করে (দ্বিতীয়টি বহুবচনীয় হিসাবে নোট করুন)। এই হ্যাক মূল renames /usr/bin/pg_ctlকরতে /usr/bin/pg_ctl-orig, এবং তারপর যে কেবল মূল pg_ctl প্রোগ্রাম কল কোনো স্ট্রিং "unix_socket_directory" "unix_socket_directories" এ পরিবর্তিত সঙ্গে সব আর্গুমেন্ট ক্ষণস্থায়ী এর জায়গায় একটি শেল স্ক্রিপ্ট তৈরি করে।

ব্যাশ, এক একটি স্ট্রিং একটি অংশ পরিবর্তন করতে পারেন থেকে বলতে barকরার জন্য bazএকটি পরিবর্তনশীল মধ্যে $foo, ব্যবহারের মাধ্যমে ${foo/bar/baz}(নোট এই পরিবর্তনশীল পরিবর্তন করে না, বরং পরিবর্তনশীল এর পরিবর্তিত বিষয়বস্তু ফেরৎ)। অ্যারেগুলি এর ${x/y/z}সমস্ত সামগ্রী একবারে একবারে প্রতিস্থাপনের সাথে অ্যারে পুনরুদ্ধার করতেও ব্যবহার করা যেতে পারে । ভেরিয়েবল $@একটি অ্যারে যা প্রোগ্রাম / স্ক্রিপ্ট / ফাংশনে সমস্ত আর্গুমেন্ট ধারণ করে, সুতরাং নতুন pg_ctl স্ক্রিপ্ট পুরানো ডিরেক্টরি নামটি নতুন ডিরেক্টরিতে পরিবর্তিত সমস্ত আর্গুমেন্ট সহ পুরানোটিকে সম্পাদন করে।


3
এটি সত্যই আমাকে সেন্টোস 7-তে 9.2 থেকে 9.6 এ পোস্টগ্রেস আপগ্রেড করার অনুমতি দিয়েছে! ধন্যবাদ!
সূর্যাস্তজঙ্কস

2
9.2 থেকে 9.6 পর্যন্ত আমার জন্য দুর্দান্ত কাজ করেছে। অনেক ধন্যবাদ! এই উত্তর না দিয়ে আমি কী করতাম তা ধারণা নেই!
সেবকে

আমার জন্যও কাজ করেছেন, 9.2 থেকে 9.6 থেকে সেন্টোস 7
গ্যাব্রিয়েল থেরন

1
হয়ত বাশ হ্যাকের কৌশল ব্যাখ্যা করা অন্যদেরকে ভবিষ্যতে একই ধরণের সমস্যার মোকাবেলায় সহায়তা করতে পারে। এটি কিছু গুরুতর বাশ মোচড়
দিচ্ছে

দুর্দান্ত এবং মার্জিত সমাধান, পোস্টগ্র্রেএসকিউএল 9.2 থেকে 10.7
সেন্টোস

5

আমি একই সমস্যা পেয়েছি। আমি ফেডোরা রেপোর 9.2.4 থেকে PGDG 9.3 এ আপগ্রেড করছি। সমস্যার উত্স হ'ল ফেডোরা প্যারামিটারের পরিবর্তনগুলি ব্যাকপোর্ট unix_socket_directoryকরে unix_socket_directories( https://bugzilla.redhat.com/show_bug.cgi?id=853353 দেখুন )।

আমার সমাধানটি হ'ল pg_upgradeউত্সগুলি থেকে পুনর্নির্মাণ করা, ফাইলের আপডেট সহ contrib/pg_upgrade/server.c:199যেখানে pg_upgradeসার্ভার সংস্করণটির জন্য পরীক্ষা করা হয়:

199:       (GET_MAJOR_VERSION(cluster->major_version) < 903) ?

, আমার ক্ষেত্রে আমি এটিকে পরিবর্তন করি:

199:       (GET_MAJOR_VERSION(cluster->major_version) < 900) ?

(আমার প্যাচ ফাইলটি এখানে দেখুন )।


আপনি কি দয়া করে ব্যাখ্যা করতে পারেন কেন এই সমস্যাটি সমাধান করে (আমার পছন্দ অনুসারে, যারা উত্সগুলির সাথে অত্যধিক পরিচিত নয় (সংক্ষিপ্তসার থেকে সাবধান!))?
dezso

4
উপরে @a_horse মন্তব্য অনুযায়ী, মূল প্রজেক্টের পোস্টগ্রি প্যারামিটার পরিবর্তন হয়েছে unix_socket_directoryথেকে unix_socket_directoriesসংস্করণ 9.3 হবে। তবে ফেডোরা রক্ষণাবেক্ষণকারী এটি নিম্ন সংস্করণে ব্যাকপোর্ট করে। সুতরাং, pg_upgradeপিজিডিজি (পোস্টগ্রিসএসকিউএল গ্লোবাল ডেভেলপমেন্ট গ্রুপ) থেকে ইউইউএম সংগ্রহস্থল আশা করে যে 9.2.4 সংস্করণটি গ্রহণ করে unix_socket_directoryতবে বাস্তবে ফেডোরা ইউইউএম সংগ্রহস্থল থেকে 9.2.4 গ্রহণ করে unix_socket_directories। এই ক্ষেত্রে, কারণ ফেডোরা এটি 9.0 সংস্করণে ব্যাকপোর্ট করে, আমি এটি unix_socket_directoriesসংস্করণ> = 9.0 এর জন্য ব্যবহার করে পরিবর্তন করেছি ।
আলী আকবর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.