PostgreSQL Timestamp

Reengen
reengen
Published in
4 min readDec 13, 2018

Timestamp bilgisi için postgresql’de iki farklı veri tipi bulunmaktadır.

  • timestamp without time zone
  • timestamp with time zone

Her iki veri tipi de time zone bilgisi içermemektedir.

timestamp without time zone

Girdi(input) olarak verilen değerler olduğu gibi kaydedilir ve görüntülenir.

output

timestamp with time zone

Input olarak verilen değerler UTC’ye çevrilip kaydedilir. Bu veri tipi timezone bilgisi tutmaz, sadece “timezone aware”’dir. UTC olarak tutulan veriler gösterilirken database’in timezone bilgisine gore dönüştürülüp gösterilir.

Tam olarak ifade etmek gerekirse postgresql client/server protokolünü implement eden her client, sql sorgusu yaptığında timestamp with time zone veritipinde tanımlanmış alanı database’in timezone bilgisiyle dönüştürülmüş şekilde elde eder.

Bir örnekle ilerleyelim. Database’in timezone bilgisinin ‘UTC’ olduğunu varsayalım. Ya da **set timezone** komutuyla session bazında database’in timezone bilgisini değiştirebiliriz. Konfigürasyon(postgresql.conf) ayarlarından da database’in timezone bilgisi değiştirilebilir.

output

output

Timestamp değerini timezone bilgisiyle verdiğimizde önce UTC’ye çevrilip kaydedilmiştir, ardından database’in timezone bilgisine göre çevrilerek gösterilmiştir.

Daha iyi anlaşılması için database timezone bilgisini ‘EUROPE/ISTANBUL’ olarak değiştirelim.

output

output

Burada dikkat edilmesi gereken nokta timezone bilgisi verilmeden yapılan insert işleminde database’in timezone bilgisi baz alınır. Kısacası database’in timezone bilgisini içeriyormuş gibi işlem yapılır.

AT TIME ZONE

Timestamp veri tipleri arasında dönüşüm yapılmasını sağlar.

Postgresql’deki timezone(zone, timestamp) function’inin sql-friendly olarak yazılmasıdır.

Girilen veri tipine göre iki farklı şekilde yorumlanmaktadır. Dönüşüm yaparken bu noktaya dikkat edilmesi gerekiyor.

  • Dönüşüm yapmak istenen veri tipi timestamp with time zone ise geri dönüş tipimiz(return type) timestamp without time zone olacaktır.
  • Dönüşüm yapmak istenen veri tipi timestamp without time zone ise geri dönüş tipimiz(return type) timestamp with time zone olacaktır.

Daha iyi anlaşılabilmesi için iki farklı başlık altında ilerleyelim.

AT TIME ZONE ON TIMESTAMP WITHOUT TIME ZONE

Bildiğimiz gibi timestamp without time zone veri tipi timezone awaredeğildir. Girdiğimiz timestamp bilgisinde herhangi bir dönüşüm işlemi gerçekleştirmez, olduğu gibi kaydeder. at time zone key’i ile timestamp verisinin hangi timezone’da olduğunu söylemiş oluruz. Böylece postgresql o veriyi o time zone’da kabul edip database’in timezone bilgisine convert edip timestamp with time zone olarak elde edilmesini sağlar.

Olduğu gibi kaydedilen timestamp(without timezone) verilerinin time zone bilgisi içerecek sekilde gösterilmesini sağlar. Conversion işlemlerinde ve Select sorgularındaki gösterimlerde kolaylık sağlanır.

output

output

AT TIME ZONE ON TIMESTAMP WITH TIME ZONE

at time zone key’i burada daha farklı yorumlanmaktadır. UTC olarak saklanan veriler database’in time zone bilgisi kullanılarak convert edilip gösterilirdi. Burada belirlediğimiz time zone bilgisine göre conversion işlemi gerçekleştirilip timestamp verisi timestamp without time zone tipinde gösterilir.

UTC olarak kaydedilen timestamp verilerin belirlenen bir time zone’daki local time olarak gösterilmesini sağlar. Conversion islemlerinde ve Select sorgularındaki gösterimlerde kolaylık sağlanır.

output

output

Neleri okudum:

Author: Mustafa Birinci, Software Developer at Reengen

--

--

Reengen
reengen

Energy IoT Platform is a PaaS Analytics Solution for Global Energy & Utilities Industry