使用postgres为rails提供created_at和updated_at

时间:2016-01-25 04:19:49

标签: ruby-on-rails postgresql rails-activerecord

我正在做a mass insert la la chris-heald。如果您使用原始SQL直接与数据库交互,您是否需要自己提供created_atupdated_at字段,或者您是否可以免费获得postgres字段?我不清楚它是Rails还是postgres在这里进行自动生成。

1 个答案:

答案 0 :(得分:5)

ActiveRecord自行设置updated_atcreated_at值,它不会设置数据库来提供这些值。

如果你通过SQL进行批量插入,那么你有一些选择:

  1. 使用Time.now.utc.iso8601手动分配它们以构建必要的字符串。如果您的时间戳需要更高的精确度,那么您可以使用strftime代替iso8601来构建字符串。

  2. 让数据库通过设置这两列的默认值来完成它。你可以说:

    alter table your_table alter column created_at set default now();
    alter table your_table alter column created_at set default now();
    

    添加默认值,然后进行批量导入,然后使用以下方法删除默认值:

    alter table your_table alter column created_at drop default;
    alter table your_table alter column created_at drop default;
    

    如果您正在Rails中执行所有操作,则可以使用ActiveRecord::Base.connection.execute将这些ALTER TABLE发送到您的数据库中。