জোন নাম পোস্টগ্রিজ এসকিউএল বাগ সহ "টাইম জোনে"?


12

আমি এই স্ট্যাকওভারফ্লো প্রশ্নের উত্তর দিচ্ছিলাম এবং আজব ফলাফল পেয়েছি:

 select * from  pg_timezone_names where name = 'Europe/Berlin' ;
     name      | abbrev | utc_offset | is_dst 
---------------+--------+------------+--------
 Europe/Berlin | CET    | 01:00:00   | f

এবং পরবর্তী জিজ্ঞাসা

select id, 
  timestampwithtimezone, 
  timestampwithtimezone at time zone 'Europe/Berlin' as berlin, 
  timestampwithtimezone at time zone 'CET' as cet 
from data ;
 id  | timestampwithtimezone  |       berlin        |         cet         
 -----+------------------------+---------------------+---------------------
 205 | 2012-10-28 01:30:00+02 | 2012-10-28 01:30:00 | 2012-10-28 00:30:00
 204 | 2012-10-28 02:00:00+02 | 2012-10-28 02:00:00 | 2012-10-28 01:00:00
 203 | 2012-10-28 02:30:00+02 | 2012-10-28 02:30:00 | 2012-10-28 01:30:00
 202 | 2012-10-28 02:59:59+02 | 2012-10-28 02:59:59 | 2012-10-28 01:59:59
 106 | 2012-10-28 02:00:00+01 | 2012-10-28 02:00:00 | 2012-10-28 02:00:00

আমি PostgreSQL 9.1.2 এবং উবুন্টু 12.04 ব্যবহার করছি।
সবেমাত্র পরীক্ষিত হয়েছে 8.2.11 ফলাফল একই।

ডকুমেন্টেশন অনুসারে আমি নাম বা সংক্ষিপ্ত ব্যবহার করি তা বিবেচনা করে না।

এটি কি বাগ?
আমি কি ভুল কিছু করছি?
কেউ কি এই ফলাফল ব্যাখ্যা করতে পারেন?

সম্পাদনা করুন মন্তব্যের জন্য যে সিইটি ইউরোপ / বার্লিন নয়।

আমি কেবল পিজি_টাইমজোন_নাম থেকে মানগুলি নির্বাচন করছি।

select * from  pg_timezone_names  where abbrev ='CEST';
 name | abbrev | utc_offset | is_dst 
------+--------+------------+--------

এবং

select * from  pg_timezone_names  where abbrev ='CET';
        name         | abbrev | utc_offset | is_dst 
---------------------+--------+------------+--------
 Africa/Tunis        | CET    | 01:00:00   | f
 Africa/Algiers      | CET    | 01:00:00   | f
 Africa/Ceuta        | CET    | 01:00:00   | f
 CET                 | CET    | 01:00:00   | f
 Atlantic/Jan_Mayen  | CET    | 01:00:00   | f
 Arctic/Longyearbyen | CET    | 01:00:00   | f
 Poland              | CET    | 01:00:00   | f
 .....

শীতের সময় ইউরোপ / বার্লিন +01 হয়। গ্রীষ্মের সময় এটি +02 হয়।

EDIT2 2012-10-28 এ টাইমজোন গ্রীষ্মের সময় থেকে শীতের সময় 2:00 এ পরিবর্তিত হয়েছে।
এই দুটি রেকর্ডের ইউরোপ / বার্লিনে একই মান রয়েছে:

204 | 2012-10-28 02:00:00+02 | 2012-10-28 02:00:00 | 2012-10-28 01:00:00
106 | 2012-10-28 02:00:00+01 | 2012-10-28 02:00:00 | 2012-10-28 02:00:00

এটি সুপারিশ করে যে আমি যদি বড় ডেটা রেঞ্জের জন্য গ্রীষ্মের সময় এবং শীতের সময়) এর কয়েকটি সংক্ষেপ (সিইটি বা সিইএসটি) ব্যবহার করি তবে কিছু রেকর্ডের জন্য ভুল হবে। আমি যদি 'ইউরোপ / বার্লিন' ব্যবহার করি তবে ভাল হবে।

আমি সিস্টেমের সময়টিকে '2012-01-17' এ পরিবর্তন করেছি এবং পিজি_টাইমজোন_নামগুলিও পরিবর্তিত হয়েছে।

select * from  pg_timezone_names  where name ='Europe/Berlin';
     name      | abbrev | utc_offset | is_dst 
---------------+--------+------------+--------
 Europe/Berlin | CEST   | 02:00:00   | t

1
এটি নিশ্চিত যে 2012-10-28 01:30:00সিইএসটি, সিইটি নয়।
dezso

1
যতদুর আমি জানি CETহয় না Europe/Berlin - অন্তত ডিএসটি সময়ের নয়।
a_horse_with_no_name

উত্তর:


9

প্রকৃতপক্ষে, ডকুমেন্টেশনে স্পষ্টভাবে বলা হয়েছে যে সময় অঞ্চলটির নাম এবং সংক্ষেপণ আলাদাভাবে আচরণ করবে।

সংক্ষেপে, সংক্ষিপ্ত বিবরণ এবং সম্পূর্ণ নামের মধ্যে পার্থক্য: সংক্ষেপগুলি সর্বদা ইউটিসি থেকে একটি নির্দিষ্ট অফসেটকে উপস্থাপন করে, যেখানে পুরো নামগুলির বেশিরভাগই স্থানীয় দিবালোক সঞ্চয় সময় নিয়ম বোঝায় এবং তাই দুটি সম্ভাব্য ইউটিসি অফসেট রয়েছে। উল্লেখ

FWIW, একই রেফারেন্স এছাড়াও বলে

আমরা টাইম জোনের সাথে টাইপ টাইমটি ব্যবহার করার প্রস্তাব দিই না (যদিও এটি উত্তরাধিকার অ্যাপ্লিকেশনগুলির জন্য এবং এসকিউএল স্ট্যান্ডার্ডের সাথে সম্মতি পাওয়ার জন্য পোস্টগ্র্রেএসকিউএল দ্বারা সমর্থিত)।


6

এবং এটি এখনও এর সংক্ষেপে না! আমি কিছুক্ষণ আগে খুব অনুরূপ একটি সমস্যায় পড়েছি ।

টাইম জোনের সংক্ষিপ্তসারগুলির প্রধান কনসটি এখানে ইতিমধ্যে উপস্থাপন করা হয়েছে: তারা ডিএসটি (দিবালোক সংরক্ষণের সময়) বিবেচনা করে না। প্রধান প্রো: সরলতা ফলাফল উচ্চতর কর্মক্ষমতা । ডিএসটি বিধি বিবেচনায় নেওয়া সময় অঞ্চলগুলির নাম তুলনা করে ধীর করে দেয়। টাইম জোনের সংক্ষিপ্ত বিবরণগুলি সহজ, প্রতীকী সময় অফসেট, সময় অঞ্চলের নাম নিয়মগুলির ক্রমাগত পরিবর্তনশীল সেট সাপেক্ষে। আমি এসও সম্পর্কিত এই সম্পর্কিত উত্তরে মাপদণ্ড চালিয়েছি , পার্থক্যটি লক্ষণীয়। তবে যখন কোনও সেটে প্রয়োগ করা হয় তখন সাধারণত সারির প্রতি পৃথক ডিএসটি স্থিতি (এবং historicতিহাসিক পার্থক্যগুলি) কভার করার জন্য টাইম জোনের নামগুলি ব্যবহার করা সাধারণত প্রয়োজন

আমরা সিইটি নিয়ে কথা বলছি । সত্যিই চতুর অংশ যে "সিইটি" শুধুমাত্র (স্পষ্টত) একটি হল সময় অঞ্চল সংক্ষেপ , এটা এছাড়াও একটি সময় জোন নাম , অন্তত আমার ইনস্টলেশন (পোস্টগ্রি 9.1.6 লোকেল সঙ্গে ডেবিয়ান কুঈজ "de_AT.UTF -8 উপর অনুযায়ী ") এবং এখনও অবধি আমি অন্যান্য সমস্ত দেখেছি। আমি এই বিশদগুলি উল্লেখ করছি, কারণ পোস্টগ্রিস উপলব্ধ থাকলে অন্তর্নিহিত ওএসের স্থানীয় তথ্য ব্যবহার করে।

নিজের জন্য দেখুন:

SELECT * FROM pg_timezone_names WHERE name = 'CET';

SELECT * FROM pg_timezone_abbrevs WHERE abbrev = 'CET';

এসকিউএল ফিডল।

পোস্টগ্রিস পুরো নামটির উপর সংক্ষিপ্তসারটি বেছে নেয়। সুতরাং, যদিও আমি টাইম জোনের নামগুলিতে সিইটি পেয়েছি , এক্সপ্রেশনটি টাইম জোনের সংক্ষিপ্ততার'2012-01-18 01:00 CET'::timestamptz জন্য সূক্ষ্মভাবে বিভিন্ন বিধি অনুসারে ব্যাখ্যা করা হয় ।

যদি এটি কোনও বোঝা ফুটগান না হয় তবে আমি কী তা জানি না।

অস্পষ্টতা এড়াতে, টাইম জোনের নাম 'ইউরোপ / বার্লিন' (অথবা আমার ক্ষেত্রে 'ইউরোপ / ভিয়েনা' - যা effectivelyতিহাসিক পার্থক্য বাদে কার্যকরভাবে একই রকম) এর সাথে যান। উপরে উল্লিখিত ঘনিষ্ঠভাবে সম্পর্কিত প্রশ্নের অধীনে এই বিষয়ে আরও বিশদ সন্ধান করুন ।

সমাপ্তিতে, আমি ডিএসটি-র মুরোনিক ধারণার প্রতি আমার গভীর অনুভূত অবজ্ঞার কথা বলতে চাই। এটি অস্তিত্ব থেকে অপসারণ করা উচিত এবং কখনও কখনও কথা বলা উচিত নয়।


3

এটা যাচাই কর:

select  
    '2012-10-28 02:30:00+02'::timestamp with time zone at time zone 'Europe/Berlin' as berlin,
    '2012-10-28 02:30:00+02'::timestamp with time zone at time zone 'CET' as cet,
    '2012-10-28 02:30:00+02'::timestamp with time zone at time zone 'CEST' as cest

+02 সিইএসটি বার্লিনে, সিইটি নয়।

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