如何检查 postgres 模式的创建日期?

How to check creation date of postgres schema?

出于调试目的,我想知道我的一些 postgres 模式是什么时候创建的——这可能吗?

从 PostgreSQL 和 Apartment 文档中搜索但没有找到任何有用的线索。

我使用的环境和工具:

+---------------+----------+
| Tools         | Version  |
+--------------------------+
| PostgreSQL    | 9.4.1    |
| Ruby          | 2.2.1p85 |
| Ruby on Rails | 4.1.9    |
| Apartment gem | 0.26.1   |
+---------------+----------+

如您所见,我使用 Apartment 在我的多租户 rails 应用程序中创建模式。

免责声明:这回答了对问题的错误解释。 我保留它以防它对某人有用...

当您运行 Ruby 使用 rake db:migrate 进行 Rails 迁移时,rails 维护一个文件 显示您的快照数据库结构。此文件位于 db/schema.rb.

这里有一个 table 的例子,rails 添加了 created_at :

  create_table "comments", force: true do |t|
    t.integer  "user_id"
    t.integer  "article_id"
    t.text     "content"
    t.datetime "created_at",                 null: false
    t.datetime "updated_at",                 null: false
    t.string   "origin",     default: "web"
  end

这里有更多详细信息: http://edgeguides.rubyonrails.org/active_record_migrations.html

PostgreSQL 系统目录不存储创建数据库对象的日期。您 可以 配置 Postgre SQL 或多或少地记录每个 SQL 语句 (log_statement setting),但您必须事先这样做。

您可以创建一个 event trigger and store the date of this event in a table. And example can be found here

我将post一个“Rails方式”解决方案,它不适用于以前制作的模式,但适用于新模式。

  1. 为租户创建模型rails g model Tenant name:string
  2. 为租户模型添加 after_create callback

    class Tenant < ActiveRecord::Base
      after_create :tenant_moves_in
    
      private
    
      def tenant_moves_in
        Apartment::Tenant.create self.name
      end
    
  3. 例如。创建某种脚本来创建租户或使用 ActiveRecord CRUD 功能与租户模型直接在您的应用程序中与租户一起操作,如 Tenant.create(name: 'new_tenant').

这样你可以在你的数据库租户 table 中有 created_at 和 updated_at 日期与公寓租户相关,它们代表 postgres 模式。

当然,您应该避免使用像 Apartment::Tenant.create 'new_tenant' 这样的 Aparmtent 工具创建租户,因为那样不会创建租户模型对象,因此不会保留 created_at 时间。