পোস্টগ্রিসএসকিউএল টাইমজোন সিস্টেম টাইমজোনটির সাথে মেলে না


17

আমার বেশ কয়েকটি পোস্টগ্র্যাসকিউএল 9.2 ইনস্টলেশন রয়েছে যেখানে পুরো সিস্টেমটি "ইউরোপ / ভিয়েনা" সত্ত্বেও পোস্টগ্র্রেএসকিউএল দ্বারা ব্যবহৃত টাইমজোনটি জিএমটি হয়। আমি ডাবল চেক করা যে postgresql.confনেই না থাকতে timezoneসেটিং, তাই ডকুমেন্টেশন এটা সিস্টেমের সময় অঞ্চল ফলব্যাক উচিত অনুযায়ী।

যাহোক,

# su -s /bin/bash postgres -c "psql mydb"

mydb=# show timezone;
 TimeZone 
----------
 GMT
(1 row)

mydb=# select now();
              now              
-------------------------------
 2013-11-12 08:14:21.697622+00
(1 row)

কোনও ইঙ্গিত, জিএমটি টাইমজোন কোথা থেকে আসতে পারে? সিস্টেম ব্যবহারকারী আছে না TZসেট এবং /etc/timezoneএবং /etc/timeinfoসঠিকভাবে কনফিগার বলে মনে হচ্ছে।

# cat /etc/timezone 
Europe/Vienna
# date
Tue Nov 12 09:15:42 CET 2013

কোনও ইঙ্গিত প্রশংসা করা হয়, অগ্রিম ধন্যবাদ!

উত্তর:


24

TimeZoneসেটিংয়ের ডিফল্ট মান 9.2 রিলিজের সময় পরিবর্তিত হয়েছে:

(..) যদি সুস্পষ্টভাবে সেট না করা থাকে তবে সার্ভার এই পরিবর্তনশীলটিকে সিস্টেমের পরিবেশ দ্বারা নির্ধারিত সময় অঞ্চলে সূচনা করে। (...)

(...) অন্তর্নির্মিত ডিফল্ট GMT, তবে এটি সাধারণত postgresql.conf এ ওভাররাইড হয়; initdb তার সিস্টেম পরিবেশের সাথে সঙ্গতি রেখে সেখানে একটি সেটিংস ইনস্টল করবে। (...)

যার অর্থ 9.2 সংস্করণ পূর্বের ডিফল্ট মানটি পর্বের postgresql.confসময় সেট করা উচিত initdb। আপনি যদি সেই মানটি ওভাররাইড করে থাকেন ( postgresql.confপুরানো সংস্করণগুলি থেকে আপগ্রেড করার সময় সম্ভবত পুরানোটি অনুলিপি করা হচ্ছে ) পোস্টগ্রাইএসকিউএল "GMT" মানটি ডিফল্ট হিসাবে ব্যবহার করবে।

আপনার মামলার সমাধানটি বেশ সহজ, কেবল TimeZoneসেটিংসটি আপনার পছন্দমতো postgresql.confমান পরিবর্তন করুন :

TimeZone = 'Europe/Vienna'

এর পরে reloadআপনার পরিষেবাটি দরকার :

# su - postgres -c "psql mydb -c 'SELECT pg_reload_conf()'"

তারপরে timestamp with time zone(বা timestamptz) হিসাবে সঞ্চিত সমস্ত ক্ষেত্র এখন থেকে সঠিকভাবে প্রদর্শিত হবে। তবে আপনাকে timestamp without time zone(বা timestamp) হিসাবে সঞ্চিত ক্ষেত্রগুলি সমস্ত (আপডেট) হাত দ্বারা সংশোধন করতে হবে ।

পোস্টগ্র্যাস এসকিউএল আপগ্রেড করে প্রত্যেককে আমি একটি টিপ দিচ্ছি পুরানোটিকে postgresql.confনতুন ক্লাস্টারে অনুলিপি করা নয় (লক্ষ্য করুন যে আপনি এটি করেছেন কিনা তা আমি নিশ্চিত নই, তবে এর কারণে আমি খুব একই সমস্যাটি দেখেছি)। কেবলমাত্র একটি দ্বারা উত্পাদিতটি পান initdbএবং পরিবর্তনগুলি যুক্ত করুন (কোনও diffসরঞ্জাম এই কার্যক্রমে হাততালি দিতে পারে)।


অনেক ধন্যবাদ, আমি 9.1 থেকে 9.2 এ পরিবর্তনটি লক্ষ্য করিনি। হ্যাঁ, postgresql.conf এ টাইমজোন তথ্য যুক্ত করা একটি তুচ্ছ সমাধান, কেন এটি GMT এ ফিরে আসবে তা আমি কেবল ব্যাখ্যা করতে পারিনি। স্পষ্টতই আমি সর্বদা 9.1 ডকুমেন্টেশনকে হোঁচট খেয়েছি কারণ আমি পূর্বনির্ধারিত আচরণে 9.1 থেকে 9.2 পর্যন্ত এধরণের মূল পরিবর্তন আশা করিনি।
মার্টিন সি

আপনার ডাটাবেসটি সর্বদা ইউটিসি (GMT) এ থাকা উচিত। তুলনা করা সময়কে সহজ করে তোলে। সর্বদা ক্লায়েন্ট / সেশনের সময় অঞ্চল পরিবর্তন করতে পারে। পিজেতে টাইমজোন এক্স সেট করুন। stackoverflow.com/questions/2532729/…
নীল ম্যাকগুইগান

postgresql.conf9.2+ সংস্করণে সিস্টেমের পরিবেশের সময় অঞ্চলটি স্বয়ংক্রিয়ভাবে সনাক্ত হওয়া উচিত কিনা তা নির্দিষ্ট করার কোনও উপায় আছে ?
কাইল স্ট্র্যান্ড 21

0

আমি এটির জন্য একান্ত চেষ্টা করেছি found

শুধু একটি সিমবলিক লিঙ্ক ভিতরে তৈরি , / usr / শেয়ার / zoneinfo / নামে স্থানীয়সময় (অথবা যাই হোক না কেন নাম আপনি চান) নির্দেশ করা , / etc / স্থানীয়সময়

/usr/share/zoneinfo/localtime -> /etc/localtime

এইভাবে আপনি লিঙ্কগুলির একটি স্ট্রিং তৈরি করছেন যা শেষ পর্যন্ত আপনার সিস্টেমের টাইমজোনকে নির্দেশ করে।

/etc/localtime -> /usr/share/zoneinfo/America/Los_Angeles

এখন আপনি যে লিঙ্কটি তৈরি করেছেন তার নাম নিন ( আমার ক্ষেত্রে লোকাল টাইম ) এবং এটিকে postgresql.conf এ কনফিগারেশন আইটেমের মান হিসাবে ব্যবহার করুন

TimeZone = 'localtime'

postgresql পুনরায় আরম্ভ করুন এবং "এখনই নির্বাচন করুন (); এবং "টাইমজোন দেখান;"

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