Как проверить дату создания схемы postgres?

В целях отладки я хотел бы знать, когда создаются некоторые из моих схем 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.


person Andres Ehrenpreis    schedule 15.04.2015    source источник


Ответы (4)


Системные каталоги PostgreSQL не хранят даты создания объектов базы данных. Вы можете настроить PostgreSQL для регистрации более или менее каждого оператора SQL (настройка log_statement), но это нужно было сделать заранее.

person Mike Sherrill 'Cat Recall'    schedule 15.04.2015

Вы можете создать триггер события и сохранить дату этого события. в таблице. И пример можно найти здесь

person Frank Heikens    schedule 15.04.2015

Я опубликую решение "Rails way", которое будет работать не для ранее созданных схем, а для новых.

  1. Создать модель для арендаторов rails g model Tenant name:string
  2. Добавьте обратный вызов after_create для модели Tenant

    class Tenant < ActiveRecord::Base
      after_create :tenant_moves_in
    
      private
    
      def tenant_moves_in
        Apartment::Tenant.create self.name
      end
    
  3. Например создайте какой-нибудь скрипт для создания арендаторов или используйте ActiveRecord CRUD возможность с помощью модели Tenant работать с арендаторами в вашем приложении напрямую, как Tenant.create(name: 'new_tenant').

Таким образом, вы можете иметь даты created_at и updated_at в таблице арендаторов базы данных по отношению к арендаторам апартаментов, которые представляют схемы postgres.

Конечно, вам следует избегать создания арендаторов с помощью инструмента Aparmtent, такого как Apartment::Tenant.create 'new_tenant', потому что это не создаст объект модели арендатора, и поэтому время created_at не будет сохранено.

person Andres Ehrenpreis    schedule 16.04.2015

Отказ от ответственности: это ответ на неправильную интерпретацию вопроса. Сохраняю, вдруг кому пригодится...

Когда вы запускаете миграцию Ruby on Rails с помощью rake db:migrate, rails поддерживает файл, который показывает вам снимок структуры базы данных. Этот файл находится в db/schema.rb.

Вот пример таблицы с created_at, добавленной rails:

  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

person jvenezia    schedule 15.04.2015
comment
Если я вас правильно понял, то это не совсем так. db/schema.rb содержит, да, структуру схемы базы данных, но не содержит информации о нескольких разных схемах, которые я создал. Насколько я знаю, он показывает только дату последней новой миграции. Поле created_at в таблице предназначено для хранения информации о том, когда создается объект этой таблицы, а не сама таблица. Также миграция запускается автоматически после создания новой схемы (я делаю так: Apartment::Tenant.create 'new_schema_name') - person Andres Ehrenpreis; 15.04.2015
comment
Вы правы, я неправильно понял вашу проблему. Извините, у меня нет решения для этого. - person jvenezia; 15.04.2015