PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Có cách nào để thay đổi dấu thời gian mặc định của Rails thành Y-m-d H:i:s (thay vì Y-m-d H:i:s.u) hoặc yêu cầu laravel bỏ qua phần thập phân của Y-m-d H:i:s.u không?

Giải pháp ở phía Rails

Có vẻ như ActiveRecord được sử dụng trong Rails (5.2) tự động thêm giây thập phân xuống 1 mili giây khi lưu created_atupdated_at hoặc bất kỳ cột Dấu thời gian nào khác trong DB chấp nhận giây con, như được định nghĩa trong tệp active_record/connection_adapters/abstract/quoting.rb

Một công việc xung quanh là điều này. Thêm dòng này ở cấp cao nhất trong bất kỳ tệp nào sẽ luôn được Rails đọc khi truy cập vào một mô hình (chẳng hạn như tệp mô hình 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

Bạn có thể xác nhận nó từ bảng điều khiển Rails, sau khi tạo một bản ghi mới,

MyModel.last.created_at.nsec  # => 0

hoặc chỉ cần truy cập trực tiếp vào DB để xem nó.

Cảnh báo

Thay đổi này không chỉ ảnh hưởng đến created_atupdated_at mà còn tất cả các cột dấu thời gian khác trong DB. Tôi nghĩ rằng bạn vẫn có thể lưu giá trị thành msec (hoặc nsec) chính xác cho một cột như vậy bằng cách đặt một Chuỗi trái ngược với phiên bản Thời gian cho cá thể Mô hình của bạn như my_model.col_msec_desired = "2018-01-02 03:04:05.678"; rồi đến Time::DATE_FORMATS[:db] sẽ không được tham chiếu khi lưu bản ghi.

Giải pháp tiềm năng ở phía Laravel

Có thể hơi phức tạp vào thời điểm viết bài (2018-10-18), nhưng có vẻ như một công việc đang được tiến hành, theo bài đăng rất gần đây về Laracast của cmbertsch01

(Lưu ý:một bản cập nhật lớn được thực hiện một ngày sau bài đăng gốc, sau nhận xét.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PGTune Alternatives - ClusterControl PostgreSQL Configuration

  2. Liệt kê các hàm được lưu trữ tham chiếu đến một bảng trong PostgreSQL

  3. Ký tự dòng mới của PostgreSQL

  4. Nhóm postgres theo truy vấn

  5. Ánh xạ JPA nhiều hàng với ElementCollection