ডিফল্ট টাইমজোন পোস্টগ্রাস করে


102

আমি ইনস্টল করেছি PostgreSQL 9এবং এটি প্রদর্শিত সময়টি সার্ভার সময়ের চেয়ে 1 ঘন্টা পিছনে রয়েছে।

চলমান Select NOW()শো:2011-07-12 11:51:50.453842+00

সার্ভারের তারিখটি দেখায়: Tue Jul 12 12:51:40 BST 2011

এটি 1 ঘন্টা পিছনে তবে টাইমজোনটি দেখানো হয়েছে phppgadmin:TimeZone Etc/GMT0

আমি postgresql.confসেটিংসে গিয়ে চেষ্টা করেছি

টাইমজোন = জিএমটি

তারপরে পুনরায় চালু করুন তবে কোনও পরিবর্তন নেই।

আমি যে কোনও ধারণাগুলি ভেবেছিলাম এটি কেবলমাত্র সার্ভারের টাইমজোনটি ব্যবহার করবে তবে স্পষ্টতই নয় !?

সমাধান!: আমি GMTআগে সেট করেছিলাম এবং এটি এক ঘন্টা পিছনে ছিল। কাছাকাছি অনুসন্ধানের পরে দেখা যাচ্ছে যে আমার এটি সেট করা দরকার Europe/London। এটি ব্রিটিশ গ্রীষ্মের সময়গুলিতে +1 ঘন্টা অ্যাকাউন্টে নেয়, GMT দেয় না!


আপনি কোনও পরিবর্তন করার আগে বর্তমান টাইমজোন মানটি পরীক্ষা করা ভাল। টিপস এখানে: stackoverflow.com/a/28218103/625840
হার্টলে ব্রোডি

উত্তর:


118

সময় অঞ্চলটি একটি সেশন প্যারামিটার। সুতরাং, আপনি বর্তমান সেশনের সময় অঞ্চল পরিবর্তন করতে পারেন।

ডকটি দেখুন ।

set timezone TO 'GMT';

অথবা, এসকিউএল স্ট্যান্ডার্ডকে আরও ঘনিষ্ঠভাবে অনুসরণ করে, SET TIME ZONEকমান্ডটি ব্যবহার করুন । "TIME ZONE" এর জন্য দুটি শব্দ লক্ষ্য করুন যেখানে উপরের কোডটিতে একটি শব্দ "টাইমজোন" ব্যবহৃত হয়েছে।

SET TIME ZONE 'UTC';

ডক পার্থক্য ব্যাখ্যা:

সেট টাইম জোন এসকিউএল স্ট্যান্ডার্ডে সংজ্ঞায়িত সিনট্যাক্স প্রসারিত করে। স্ট্যান্ডার্ডটি কেবল সংখ্যা টাইম জোন অফসেটগুলিকে মঞ্জুরি দেয় যখন PostgreSQL আরও নমনীয় সময়-অঞ্চল নির্দিষ্টকরণের অনুমতি দেয়। অন্যান্য সমস্ত এসইটি বৈশিষ্ট্য হ'ল পোস্টগ্রেএসকিউএল এক্সটেনশন।


4
আমি সেটিংস চেষ্টা করেছি এবং এটি কাজ করে বলে মনে হয় না, এটি কেবল সক্রিয় অধিবেশনের জন্য সেট করে না। আমি এটি সব ডাটাবেসের জন্য স্থায়ীভাবে পরিবর্তন করতে চাই ect, আমি খুব সহজেই phpmyadmin এ এটি করেছিলাম তবে পোস্টগ্রেস্কেলের জন্য এটি করার কোনও উপায় খুঁজে পাওয়া যায় না
ব্লু টাওয়ার্স

yup 'সেট টাইমজোন টু ..' কেবলমাত্র বর্তমান সেশনের জন্য সময় অঞ্চল নির্ধারণ করে এবং যদি আপনি Postgresql.conf এ টাইমজোন কনফিগারেশন প্যারামিটারটি পরিবর্তন করেন তবে সমস্ত ডাটাবেসের জন্য সময় অঞ্চল পরিবর্তন করা উচিত।
মুহাম্মদ উসামা

4
পোস্টগ্র্রেসক্লাল.কমের টাইমজোনটি GMT তে পরিবর্তন করে চেষ্টা করেছি এবং মনে হচ্ছে এটি ঠিকঠাক কাজ করছে।
মুহাম্মদ উসামা

আরো মান (এসকিউএল বৈশিষ্ট অনুবর্তী) "সময়ের-ক্ষেত্র" জন্য দুটি শব্দ হল: SET TIME ZONE 'UTC';ডকটি দেখুন ।
তুলিল বাউর্ক

107

এর মধ্যে একটি চয়ন করুন timezone:

SELECT * FROM pg_timezone_names;

এবং setনীচে প্রদত্ত উদাহরণ হিসাবে:

ALTER DATABASE postgres SET timezone TO 'Europe/Berlin';

postgresউপরের বিবৃতিতে আপনার ডিবি নামটি ব্যবহার করুন ।


4
এটি শেষ হওয়ার পরে আপনার পোস্টগ্রেশন সার্ভিসটি পুনরায় চালু করতে হবে
জয়ে পিন্টো

25
@ জোয়েপিন্ট সত্য নয়, ইস্যু করার পক্ষে এটি যথেষ্ট SELECT pg_reload_conf();:)
আলফাআকা

4
আমি আমার ডাটাবেসের নাম দিয়ে বিবৃতিটি চালিয়েছি এবং SELECT pg_reload_conf()সত্য ফিরে এসেছি , now()এবং select current_setting('TIMEZONE')'আমেরিকা / নিউ_ইয়র্ক' এর জন্য মানগুলি অবিরত করে চলেছি। আমি সুপারভাইজার না হওয়ার কারণেই কি?
নুমেনন

@ জোয়িপিন্টোর পরামর্শের জন্য ধন্যবাদ, আমি SEGP pg_reload_conf () দিয়ে চেষ্টা করেছি এবং এটিও সত্য ফিরে পেয়েছে তবে পোস্টগ্রাসের পরিষেবাটি পুনরায় চালু করার পরে এটি আপডেট হওয়া টাইমজোনটি দেখায় নি, এটি নতুন টাইমজোনকে প্রতিফলিত করেছে।
প্রেম পপটিয়া

@ প্রম্পোতিয়া আমি বিশ্বাস করি আপনি যে পরিবর্তন করেছেন তার চেয়ে আলাদা ডিবিতে আপনি সংযোগ করছেন।
অ্যালেক্স রিজভী

49

Postgres 9.1 এ টাইমজোন পরিবর্তনটি সম্পাদন করতে আপনাকে অবশ্যই:

1.- এপ্রোপিয়েট ফাইলের জন্য /usr/share/postgresql/9.1/ এ আপনার "টাইমজোনস" ফোল্ডারে অনুসন্ধান করুন, আমার ক্ষেত্রে এটি "আমেরিকা টেক্সট" হবে, এতে আপনার অঞ্চলের সবচেয়ে কাছের অবস্থানটি অনুসন্ধান করুন এবং অনুলিপিটি অনুলিপি করুন বাম কলামে প্রথম অক্ষর।

উদাহরণস্বরূপ: আপনি যদি "নিউইয়র্ক" বা "পানামা" এ থাকেন তবে এটি "EST" হবে:

#  - EST: Eastern Standard Time (Australia)
EST    -18000    # Eastern Standard Time (America)
                 #     (America/New_York)
                 #     (America/Panama)

২- আপনার postgresql.confফাইলে "টাইমজোন" লাইনটি কমেন্ট করুন এবং আপনার টাইমজোনটি দেখানো হয়েছে:

#intervalstyle = 'postgres'
#timezone = '(defaults to server environment setting)'
timezone = 'EST'
#timezone_abbreviations = 'EST'     # Select the set of available time zone
                                        # abbreviations.  Currently, there are
                                        #   Default
                                        #   Australia

৩- পোস্টগ্রিস পুনরায় চালু করুন


4
এটি প্রকৃত সঠিক উত্তর কারণ এটি কেবল বর্তমান ব্যবহারকারী নয়, পিজিএসকিউএল-র প্রতিটি প্রক্রিয়ার জন্য টিজেড পরিবর্তন করে actually
jfreak53

15
আমি আপনাকে এই 3 বা 4 লেটার কোডগুলি পুরোপুরি এড়ানো পরামর্শ দিই । এগুলি মানসম্মত বা অনন্য নয়। পরিবর্তে যথাযথ টাইম জোনের নাম (মহাদেশের স্ল্যাশ শহর-অঞ্চল) ব্যবহার করুন। আপনার নিজের উদাহরণটি ব্যবহার করতে, পানামা −05:00বছরব্যাপী অফসেট ব্যবহার করে যখন নিউইয়র্ক একটি ঘন্টা ডাইলাইট সেভিং টাইম (ডিএসটি) দিয়ে সরিয়ে দেয়। একটি সময় অঞ্চল একটি অফসেটের চেয়ে বেশি; একটি টাইম জোনে অতীত, বর্তমান এবং ভবিষ্যতের নিয়ম এবং ডিএসটি-র মতো অসঙ্গতিগুলির সেট রয়েছে। সুতরাং, বলতে আপনি কি বোঝাতে চেয়েছেন: America/Panama, America/New_York, Europe/London, UTC(অথবা Zulu)।
তুলসী বাউরক

4
অনুযায়ী PostGRE ডক্স , আপনি একটি অভ্যন্তরীণ দৃশ্য পরীক্ষা করে আপনার নির্দিষ্ট ডাটাবেসের মধ্যে স্বীকৃত সময় অঞ্চল নামের একটি তালিকা পেতে পারেন SELECT * FROM pg_timezone_namesসম্ভবত করতে নিরাপদ, প্রদত্ত 3 য়-পক্ষ সাইট অগত্যা আপ-টু-ডেট যেমন হবে না (বা পুরানো) আপনার নিজস্ব ডাটাবেস উদাহরণ হিসাবে।
কমই 'হেন ইজ মনিকা' অভাবিত

আমার কাছে সেই ফোল্ডারটি ভাগ নেইpostgresql
সুপারউবারডুপার

PostgreSQL পুনরায় আরম্ভ করার পরিবর্তে, আপনি চালাতে পারেন select pg_reload_conf()
আনভিস 9:48

43

গৃহীত উত্তর দ্বারা মুহাম্মদ উসামা সঠিক।

কনফিগারেশন প্যারামিটারের নাম

এই উত্তরটি দেখায় যে কীভাবে নিম্নলিখিতগুলির সাথে পোস্টগ্রিস-নির্দিষ্ট কনফিগারেশন প্যারামিটার সেট করতে হবে:

SET timezone TO 'UTC';

… যেখানে timezoneএসকিউএল কমান্ড নেই, এটি কনফিগারেশন প্যারামিটারের নাম।

এর জন্য ডকটি দেখুন ।

স্ট্যান্ডার্ড এসকিউএল কমান্ড

অন্যথা, আপনি SQL কমান্ড এসকিউএল বৈশিষ্ট দ্বারা সংজ্ঞায়িত ব্যবহার করতে পারেন: SET TIME ZONE। এই সিনট্যাক্সে একজোড়া শব্দ TIME ZONE"টাইমজোন" (প্রকৃত এসকিউএল কমান্ড বনাম প্যারামিটারের নাম) প্রতিস্থাপন করে, এবং কোনও "TO" নেই।

SET TIME ZONE 'UTC';

কেবল বর্তমান সেশনের জন্য মান নির্ধারণ করতে, এই কমান্ড এবং উপরের একটিতে একই প্রভাব রয়েছে effect পরিবর্তনটি স্থায়ী করতে, এই সহোদর উত্তরটি দেখুন

এর জন্য ডকটি দেখুন ।

সময় অঞ্চল নাম

আপনি একটি সঠিক সময় অঞ্চল নাম নির্দিষ্ট করতে পারেন । এর বেশিরভাগই মহাদেশ / অঞ্চল।

SET TIME ZONE 'Africa/Casablanca';

… বা…

SET TIME ZONE 'America/Montreal';

3 বা 4 বর্ণ সংক্ষিপ্তসারগুলি এড়িয়ে চলুন যেমন ESTবা ISTসেগুলি মানক বা অনন্য নয়। টাইম জোনের নামের তালিকার জন্য উইকিপিডিয়া দেখুন ।

বর্তমান অঞ্চলটি পান

একটি সেশনের জন্য বর্তমান সময় অঞ্চলটি দেখতে, নিম্নলিখিত বিবৃতিগুলির মধ্যে দুটি ব্যবহার করে দেখুন। প্রযুক্তিগতভাবে আমরা SHOWরান-টাইম প্যারামিটার প্রদর্শনের জন্য কমান্ডটি কল করছি ।

SHOW timezone ;

… বা…

SHOW time zone ;

মার্কিন / প্রশান্ত মহাসাগর


4
শুধুমাত্র উত্তর হচ্ছে প্রদানের জন্য বোনাস পয়েন্ট SHOWঅংশ
এরিয়েল Allon

রজার যে, আরিয়েল অ্যালন - এবং পরবর্তী লোকের জন্য যারা সেই সময় অঞ্চলটি একটি পরিবর্তনশীল হিসাবে বেছে নিতে চায় ...SELECT current_setting('TIMEZONE')
ওয়েলসপ্রিং

10

পূর্ববর্তী উত্তরগুলি ছাড়াও, আপনি যদি pgAdmin III সরঞ্জামটি ব্যবহার করেন তবে আপনি সময় অঞ্চলটি নীচে নির্ধারণ করতে পারেন:

  1. সরঞ্জাম> সার্ভার কনফিগারেশন> postgresql.conf এর মাধ্যমে পোস্টগ্র্যাগ কনফিগারেশন খুলুন
  2. এন্ট্রি টাইমজোনটি সন্ধান করুন এবং খোলার জন্য ডাবল ক্লিক করুন
  3. মান পরিবর্তন করুন
  4. কনফিগারেশন পরিবর্তনগুলি প্রয়োগ করতে সার্ভার পুনরায় লোড করুন (উপরে বা পরিষেবাগুলির মাধ্যমে প্লে বোতাম)

PgAdmin III এ পোস্টগ্রিফ কনফিগারেশন


3

নোট করুন অনেক তৃতীয় পক্ষের ক্লায়েন্টের নিজস্ব টাইমজোন সেটিংস কোনও পোস্টগ্রিস সার্ভার এবং \ বা সেশন সেটিংস ওভারল্যাপ করে।

যেমন আপনি যদি 'ইন্টেলিজ আইডিইএ 2017.3' (বা ডেটাগ্রিপস) ব্যবহার করেন তবে আপনার টাইমজোনটিকে এই হিসাবে সংজ্ঞায়িত করা উচিত:

'ডিবি উত্সের বৈশিষ্ট্য' -> 'উন্নত' ট্যাব -> 'ভিএম বিকল্প': -ডুসার.টাইমজোন = ইউটিসি + 06: 00

অন্যথায় আপনি অন্য কোথাও যা কিছু সেট করেছেন তা সত্ত্বেও আপনি 'ইউটিসি' দেখতে পাবেন।


সুতরাং গ্রীষ্ম / শীতের সময় পরিবর্তনের সাথে এটি কি সমলয় রাখা দরকার?
সিপিটি সেনকফাস

4
@ Cpt.Senkfuss, আমি বিশ্বাস করি যে -Duser.Timezone = অস্ট্রেলিয়া / তাসমানিয়ারও গ্রীষ্ম-শীতের পরিবর্তনের যত্ন নেওয়া উচিত।
ARA1307

এটি জীবন রক্ষাকারী কৌশল is আমি এখন পর্যন্ত 3 ঘন্টা :) বিটিডব্লিউ, পুরো টাইম জোনের নাম চেষ্টা করে দেখলাম এটি কী কার্যকর হবে তা আনস্ট্যান্ড করার চেষ্টা করছি। আমার জন্য এটি -ডুসার.টাইমজোন = ইউরোপ / ইস্তানবুল
ওলগুন কেয়া

1

হয়তো প্রশ্নের সাথে সম্পর্কিত নয়, তবে আমার সিএসটি ব্যবহার করতে হবে, সিস্টেমের টাইমজোনকে পছন্দসই টিজেড (আমেরিকা / ...) এ সেট করতে হবে এবং তারপরে পোস্টগ্র্যাস্কল কনফেমে টাইমজোনটির মান 'লোকালটাইম'-এ সেট করে এবং এটি আকর্ষণ হিসাবে কাজ করেছিল , বর্তমান_মুহূর্তে সঠিক সময় মুদ্রণ করা (উবুন্টু ১ on-তে পোস্টগ্র্যাস্কিল 9.5)

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