问题:为带有 postgres 的 rails 提供批量插入的 created_at 和 updated_at

我正在做批量插入和 @chris-heald。如果您使用原始 SQL 直接与数据库交互,您是否需要自己提供created_atupdated_at字段,或者您会从 postgres 免费获得吗?我不清楚是 Rails 还是 postgres 在这里进行自动生成。

解答

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();

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

更改表 your_table 更改列 created_at 删除默认值;
更改表 your_table 更改列 created_at 删除默认值;

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

Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐