PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Има ли начин да промените времевите марки по подразбиране на Rails на Y-m-d H:i:s (вместо Y-m-d H:i:s.u) или да накарате laravel да игнорира десетичната част на Y-m-d H:i:s.u?

Решение в страната на Rails

Изглежда, че ActiveRecord, използван в Rails (5.2), автоматично добавя десетични секунди до 1 msec при запазване на created_at и updated_at или всякакви други колони с клеймо за време в DB, ​​които приемат подсекунди, както е дефинирано във файла active_record/connection_adapters/abstract/quoting.rb

Заобикалянето е това. Добавете този ред на най-високо ниво във всеки от файловете, които винаги ще се четат от Rails при достъп до модел (като файл с модел ApplicationRecord).

Time::DATE_FORMATS[:db] = '%Y-%m-%d %H:%M:%S.000000000'

module ActiveRecord::ConnectionAdapters::Quoting
  alias_method :quoted_date_orig, :quoted_date if ! self.method_defined?(:quoted_date_orig)

  def quoted_date(*rest, **kwd)
    quoted = quoted_date_orig(*rest, **kwd)
    quoted.sub(/(\.\d*)\.\d{6}$/, '\1')
  end
end

Можете да го потвърдите от конзолата на Rails, след като създадете нов запис,

MyModel.last.created_at.nsec  # => 0

или просто влезте директно в базата данни, за да я видите.

Предупреждение

Тази промяна засяга не само created_at и updated_at но също и всички други колони с клеймо за време в DB. Мисля, че все още можете да запазите стойност за точност на msec (или nsec) в такава колона, като зададете String вместо екземпляр Time на вашия модел на екземпляр като my_model.col_msec_desired = "2018-01-02 03:04:05.678"; след това Time::DATE_FORMATS[:db] няма да бъдат посочени при запазване на записа.

Потенциално решение от страна на Laravel

Може да е трудно към момента на писане (2018-10-18), но работата изглежда е в ход, според съвсем скорошна публикация на Laracast от cmbertsch01

(Забележка:голяма актуализация, направена ден след първоначалната публикация, след коментара.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Динамично upsert в postgresql

  2. Подредете коментарите по пътя на нишката и по общия брой гласове

  3. Spring + Hibernate:Използване на кеш паметта на план за заявка

  4. Как да използвате вътрешни съединения с подзаявки в Laravel Eloquent

  5. Mac + virtualenv + pip + postgresql =Грешка:pg_config изпълним файл не е намерен