sql >> Databáze >  >> RDS >> PostgreSQL

Milisekundové rozlišení DateTime v Ruby

ActiveRecord by měl zachovat plnou přesnost z databáze, jen se na to nedíváte správně. Použijte strftime a %N formát pro zobrazení zlomků sekund. Například psql říká toto:

=> select created_at from models where id = 1;
         created_at         
----------------------------
 2012-02-07 07:36:20.949641
(1 row)

a ActiveRecord říká toto:

> Model.find(1).created_at.strftime('%Y-%m-%d %H:%M:%S.%N')
 => "2012-02-07 07:36:20.949641000" 

Takže tam je všechno, jen musíte vědět, jak to vidět.

Pamatujte také, že ActiveRecord vám pravděpodobně poskytne ActiveSupport::TimeWithZone objekty spíše než DateTime objekty, ale DateTime zachová také vše:

> '2012-12-31T01:01:01.232323+3'.to_datetime.strftime('%Y-%m-%d %H:%M:%S.%N')
 => "2012-12-31 01:01:01.232323000" 

Podívejte se na connection_adapters/column.rb ve zdroji ActiveRecord a zkontrolujte string_to_time metoda dělá. Váš řetězec by klesl o fallback_string_to_time cestu a to zachovává zlomkové sekundy tak blízko, jak mohu říct. Něco divného by se mohlo dít jinde, nebyl bych překvapený vzhledem k podivným věcem, které jsem viděl ve zdroji Rails, zejména databázové stránce věcí. Zkusil bych převést řetězce na objekty ručně, takže ActiveRecord od nich dá ruce pryč.



  1. Jak přimějete PyPy, Django a PostgreSQL ke spolupráci?

  2. Můj výpis PDO nefunguje

  3. Stále dostávám chybový vztah [TABLE] neexistuje

  4. Existuje rozdíl ve výkonu mezi CTE, dílčím dotazem, dočasnou tabulkou nebo proměnnou tabulky?