如何更改 Rails 迁移 t.timestamps 以在 postgres 中使用 `timestamp(0) without timezone`

2023-12-10

我正在尝试找出如何更改本机数据类型t.timestamps用于 Rails 迁移。 postgres 中的默认类型是timestamp without timezone。我想要的是timestamp(0) without timezone.

我想更改本机数据类型,以便在创建新表时t.timestamps在迁移中使用时,它会自动创建正确的时间戳数据类型。

我需要timestamp(0) without timezone因为我的 Rails 应用程序与 Laravel 应用程序共享其数据库,并且两个应用程序都可以插入数据。由于rails使用毫秒/laravel不使用毫秒,并且laravel似乎没有办法(截至2018年10月23日)支持拥有包含不同格式时间戳的表(Y-m-d H:i:s.u vs Y-m-d H:i:s)而不必关闭模型中的时间戳,本质上禁用它们的自动管理,我想让数据库强制使用单一格式(Y-m-d H:i:s).

欲了解更多详细信息,请我的另一个问题:有没有办法将 Rails 默认时间戳更改为 Y-m-d H:i:s (而不是 Y-m-d H:i:s.u)或让 laravel 忽略 Y-m-d H:i:s.u 的小数部分?

所以我想用timestamp(0)截断毫秒,并且在创建新表时不必考虑正确设置表时间戳类型,因为本机类型已经是timestamp(0)

我试过这个

./config/environments/initializers

require "active_record/connection_adapters/postgresql_adapter"

module ActiveRecord
 module ConnectionAdapters
   class PostgreSQLAdapter
     NATIVE_DATABASE_TYPES.merge!(
      timestamp: { name: "timestamp(0) without timezone" }
     )
   end
 end
end

和像这样的迁移

class ChangeTimestampTypesToTimestamp0 < ActiveRecord::Migration[5.2]
  def change
    create_table :test, id: :uuid, default: -> { "gen_random_uuid()" } do|t|
      t.string :name, null: false

      t.timestamps
    end
  end
end

但这没有用。

我还尝试更改时间戳以使用 timestampz 与上面相同的迁移作为健全性检查,仍然没有运气......

require "active_record/connection_adapters/postgresql_adapter"

module ActiveRecord
 module ConnectionAdapters
   class PostgreSQLAdapter
     NATIVE_DATABASE_TYPES.merge!(
       timestamp: { name: "timestamptz" }
     )
   end
 end
end

enter image description here


我相信我已经弄清楚了!

我开始通过从控制台打印变量来研究 NATIVE_DATABASE_TYPES 设置的内容

Rails c
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::NATIVE_DATABASE_TYPES

Result: {:primary_key=>"bigserial primary key", :string=>{:name=>"character varying"}, :text=>{:name=>"text"}, :integer=>{:name=>"integer", :limit=>4}, :float=>{:name=>"float"}, :decimal=>{:name=>"decimal"}, :datetime=>{:name=>"timestamp"}, :time=>{:name=>"time"}, :date=>{:name=>"date"}, :daterange=>{:name=>"daterange"}, :numrange=>{:name=>"numrange"}, :tsrange=>{:name=>"tsrange"}, :tstzrange=>{:name=>"tstzrange"}, :int4range=>{:name=>"int4range"}, :int8range=>{:name=>"int8range"}, :binary=>{:name=>"bytea"}, :boolean=>{:name=>"boolean"}, :xml=>{:name=>"xml"}, :tsvector=>{:name=>"tsvector"}, :hstore=>{:name=>"hstore"}, :inet=>{:name=>"inet"}, :cidr=>{:name=>"cidr"}, :macaddr=>{:name=>"macaddr"}, :uuid=>{:name=>"uuid"}, :json=>{:name=>"json"}, :jsonb=>{:name=>"jsonb"}, :ltree=>{:name=>"ltree"}, :citext=>{:name=>"citext"}, :point=>{:name=>"point"}, :line=>{:name=>"line"}, :lseg=>{:name=>"lseg"}, :box=>{:name=>"box"}, :path=>{:name=>"path"}, :polygon=>{:name=>"polygon"}, :circle=>{:name=>"circle"}, :bit=>{:name=>"bit"}, :bit_varying=>{:name=>"bit varying"}, :money=>{:name=>"money"}, :interval=>{:name=>"interval"}, :oid=>{:name=>"oid"}

事实证明timestamp在我开始将其包含在我的

module ActiveRecord
 module ConnectionAdapters
   class PostgreSQLAdapter
     NATIVE_DATABASE_TYPES.merge!(
      timestamp: { name: "timestamp", limit:0 }
     )
   end
 end
end

所包含的想法是datetime我意识到timestamp是的别名datetime.

我将 NATIVE_DATABASE_TYPES 合并更改为如下所示......

require "active_record/connection_adapters/postgresql_adapter"

module ActiveRecord
 module ConnectionAdapters
   class PostgreSQLAdapter
     NATIVE_DATABASE_TYPES.merge!(
       datetime: { name: "timestamp", limit:0 }
     )
   end
 end
end

我运行了迁移,列已成功设置为timestamp(0) without timezone

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更改 Rails 迁移 t.timestamps 以在 postgres 中使用 `timestamp(0) without timezone` 的相关文章

  • 带有附加参数的redirect_to

    我是一个菜鸟 redirect to users url notice Succeed p p 然后我添加一个message它失败了 redirect to users url notice Succeed message test p p
  • 如何创建一个省略其内容时间戳的 tar 文件?

    有没有办法创建一个 tar省略其文件 目录的 atime ctime mtime 值的文件 我们为什么要这样做 我们的构建过程中有一个步骤 生成一个打包到 tar 文件中的工件目录 我们期望构建步骤是幂等的 给定相同的输入 它会产生exac
  • 查找 PostgreSQL 中所有范围集合的所有交集

    我正在寻找一种有效的方法来查找时间戳范围集之间的所有交集 它需要与 PostgreSQL 9 2 配合使用 假设这些范围代表一个人可以见面的时间 每个人都可以有一个或多个空闲时间范围 我想找到all可以召开会议的时间段 即所有人都有空的时间
  • 使用 JSON 参数的 Postgres 批量 INSERT 函数

    这是一个plpgsqlpostgres 的函数9 6 它试图INSERT一行 如果插入没有失败 由于违反键约束 那么它会运行更多命令 CREATE FUNCTION foo int text text RETURNS void AS BEG
  • 自定义通用 Rails 错误消息

    我们的 Rails 应用程序被设计为链接到多个客户端数据库的单个代码库 根据子域 应用程序确定要连接到哪个数据库 我们使用液体模板为每个客户定制演示文稿 我们无法为每个客户定制通用的 我们很抱歉 出了点问题 消息 谁能推荐一种方法让我们能够
  • 如何从 PostgreSQL 中的时间戳列值提取一天中的时间(或小时)?

    我正在尝试从 PostgreSQL 中的 时间戳 列中提取一天中的时间 这是我的做法 但是 太糟糕了 知道如何做得更好吗 SELECT date part hour date demande text hours date part min
  • Rails 3.1 和图像资源

    我已将管理主题的所有图像放入名为 admin 的文件夹内的资产文件夹中 然后我像平常一样链接到它 Ruby image tag admin file jpg CSS logo background url assets images adm
  • Rails 4 的 mobile_fu

    我正在尝试将我的应用程序从 Rails 3 2 13 切换到 Rails 4 在此过程中 我遇到了一个主要障碍 我使用 gem mobile fu 来确定用户是否来自移动设备 该 gem 需要 Railties 3 2 13 但 Rails
  • 删除 DateTime.ParseExact 的时区

    我正在尝试将字符串解析为具有以下格式的日期时间 日 日期 月 年 时间 上午 下午 时区 示例 美国东部时间 2011 年 12 月 1 日星期四晚上 8 30 我已经使用 DateTime ParseExact 和格式 dddd dd M
  • Rails 从 OrdersController 更新用户模型的属性

    这是我的代码 订单控制器类 def create order Order new params order if order purchase work GATEWAY store credit card options result wo
  • Omniauth + Google + Faraday + 代理背后=如何设置代理?

    我的生产服务器是乌班图12 我在用着设计 OmniAuth处理 Google 身份验证 但是当 Google 将控件返回给我的应用程序时 我收到错误 网络不可达 我认为这是因为服务器位于代理后面 这是错误描述 Request URL htt
  • 如何在两个模型之间建立两个 has_many/belongs_to 关系?

    我有一个Project模型 以及一个Contact模型 项目模型有一个所有者和一个客户 两者都是Contacts 显然我遇到了一些不明确的事情 因为如果我有联系人并询问其项目 Rails 将不知道我询问的是它的项目是客户还是所有者 到目前为
  • 无法使用 Rails 6 Actiontext 渲染 youtube 嵌入 iframe

    我已经设置了一个自定义嵌入模型 这样我就可以将 Instagram 或 YouTube 嵌入等内容添加到我网站上的 ActionText 内容中 它适用于 Instagram 嵌入 但不适用于 YouTube 作为参考 我要显示的 yout
  • Rails 4 和 Turbolinks - 元标签未更改

    我有一个启用了 Turbo Links 的 Rails 4 应用程序 但在更改页面时无法刷新元标记 不是完全刷新 我读到元标记需要包含在加载涡轮链接的 JavaScript 之前 但它没有效果 完全刷新可以完成这项工作 但不幸的是这不是我所
  • Capybara with Rails:如何仅查找不可见元素

    我正在 Rails 项目 Rails 5 2 0 中使用 Capybara capybara 3 1 0 进行系统测试 确保元素不可见的方法是什么 我当时用的是visible false选项 直到我发现它也匹配可见元素 例如我使用 find
  • 检查 postgres 复制状态

    有人可以建议检查 postgresql 复制状态的步骤以及如何确定复制是否未正确进行吗 我们在 pgsql9 0 和 pgsql9 4 中使用流复制 我通常使用以下 SQL 查询来检查 Postgres v11 的状态 关于主人 selec
  • puma systemd 脚本无法启动 puma

    我已经从多个来源复制并粘贴了以下美洲狮系统启动脚本的片段 但它不起作用 系统是Debian 9 6 用户rails红宝石通过安装rvm 用户rails可以启动命令RAILS ENV production bundle exec puma C
  • 有没有办法使用 Rspec/Capybara/Selenium 将 javascript console.errors 打印到终端?

    当我运行 rspec 时 是否可以让 capybara selenium 向 rspec 报告任何 javascript console errors 和其他异常 我有一大堆测试失败 但当我手动测试它时 我的应用程序正在运行 如果不知道仅在
  • rspec 中的模拟方法链

    有一系列方法可以获得user目的 我试图模拟以下内容以返回user in my Factory Girl current user AuthorizeApiRequest call request headers result 我可以模拟该
  • 升级到 Rails 6 时是否有一种编程方法可以检测 Zeitwerk::NameError?

    我目前正在将旧的 Rails 应用程序迁移到 Rails 6 好像项目中有些文件和里面定义的类不一致 运行应用程序测试时我没有看到此错误 但部署后我收到如下错误 Zeitwerk NameError expected file app my

随机推荐

  • 使用 C# 在另一个应用程序上执行鼠标单击事件

    我需要做的是 我需要使用我的自定义应用程序来控制安装在同一台计算机上的另一个应用程序 例如 如果我需要使用标准 Windows 计算器 我只需将输入事件发送到计算器 我使用了一些代码片段来实现这一点 现在我已经触发了鼠标和键盘事件 但问题是
  • Python 列表的幂集[重复]

    这个问题在这里已经有答案了 我正在尝试实现一个函数来生成列表的幂集xs 总体思路是我们遍历以下元素xs并选择是否包含x或不 我面临的问题是withX最终等于 None 一个单例列表None 因为 我认为 s add x 回报None 这不是
  • 使用 /= 规范化变量会引发 ufunc 错误

    我正在慢慢地进入一些机器学习领域 但在一项使用计算机视觉处理 Kaggle 猫和狗数据集的练习中 发生了一些我不太明白的事情 当我尝试标准化pickle中的图像值时 它在写入时起作用 X X 255 0 但当我写入时抛出错误 X 255 0
  • C select() 超时 STDIN 单字符(无 ENTER)

    我希望能够使用select 从 STDIN 输入单个字符 无 ENTER 因此 当用户按下一个键时 select 应立即返回 而不是等待用户按 ENTER 键 int main void fd set rfds struct timeval
  • 将字符串电话号码转换为整数[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我对 Java 和 Android 都缺乏经验 我正在尝试检索存储在 Android 手机模拟器的联系人之一中的电话号码 虽然我成功获取了它 但该号码已以 987 654 3210
  • C# 中委托的协变/不变/逆变

    我有以下代码 我没有为此委托指定任何通用参数和 IN OUT 方差 如果我正确理解不变性的含义 我应该无法返回基本类型的对象 因为我的委托提到了对象的返回类型 我对不变性的理解是错误的吗 class Program public deleg
  • Ansible 比较两个列表变量

    我必须检查系统上是否有可用的安装点列表 因此 我定义了一个包含挂载点列表的变量 然后从 Ansible 事实中提取可用的挂载点 hosts all vars required mounts prom data prom logs tasks
  • Webkit 中奇怪的边框不透明行为?

    我一直在测试不透明的边框 Webkit 似乎有一个奇怪的行为 这是我的代码 div span span div 你可以测试一下here 在 Firefox 中 您将得到预期的结果 一个 10px 的白色
  • 使用带有 ORDER BY 的 SQL 串联

    我很困惑 您如何解释变量连接与 ORDER BY 的差异 declare tbl table id int insert into tbl values 1 2 3 declare msg1 varchar 100 msg2 varchar
  • scikit-learn 中的哪些估计器不支持稀疏矩阵?

    我想训练一个具有很多名义属性的数据集 我从一些帖子中注意到 要转换名义属性 必须将它们转换为重复的二进制特征 据我了解 这样做在概念上会使数据集变得稀疏 我还知道 scikit learn 使用稀疏矩阵和一些估计器 因为它更快左右 但我还发
  • ScrollPane 拖动后内容变得模糊

    JavaFX 8 0有这个bug 我不知道如何解决 例子 https i stack imgur com HfsgZ png 如果我拖动 ScrollPane 其内容会变得模糊 但如果我将其拖回 内容会恢复其清晰度 如果我不修改坐标 内容看
  • 对于分配内存的函数,您遵循哪些命名约定?

    所以这里有两个函数几乎做同样的事情 如果您必须将两者都包含在您的项目中 您会如何命名每一个 void strToLower1 char str int len strlen str int i for i 0 i
  • Apache Mod Rewrite:带有 L 参数的 RewriteRule。怎么了?

    我正在开发一个 php 应用程序 但我在 Apache 和 Mod Rewrite 方面遇到了一些问题 有人知道这里出了什么问题吗 RewriteEngine on RewriteBase mysite RewriteRule css cs
  • 如何在 R 中按名称模式删除列?

    我有这个数据框 state county city region mmatrix X1 X2 X3 A1 A2 A3 B1 B2 B3 C1 C2 C3 1 1 1 1 111010 1 0 0 2 20 200 Push 8 12 NA
  • CSS3 背景图像过渡

    我正在尝试使用 CSS 过渡来制作 淡入淡出 效果 但我无法让它与背景图像一起使用 The CSS title a display block width 340px height 338px color black background
  • iPhone自动锁值?

    无法检索自动锁定值吗 或者有人知道如何像现有的警报应用程序一样修改自动锁定时间 Thanks 是的 杰森是对的 您可以使用 application setIdleTimerDisabled YES 停止自动睡眠 但没有办法访问自动锁定值 问
  • 在 Delphi 中以无边框形式/窗口平滑调整大小

    我正在尝试调整无边框表单的大小 但是当我使用右侧 底部增加大小时 边框和旧客户区域之间存在间隙 该间隙取决于移动鼠标的速度 当您从左边框甚至从左下角调整大小时 效果会更加明显 到处都很可怕 我尝试使用其他商业应用程序 它也会发生 当我更改为
  • 在 WPF 中将组合框绑定到 XML

    我知道这个问题已经被问死了 但是我已经尝试了很多我找到的建议答案 并且当我在 VS2013 中启动 WPF 时 组合框仍然没有填充 就这样吧 我有一个名为 People xml 的 XML 文档 其格式如下
  • 如何在 HTML 中定义内联内容库以与 Magnific-Popup 一起使用?

    我的页面上有许多画廊 可以通过各自的按钮启动 我喜欢在按钮旁边定义页面中画廊的标记 然后使用隐藏的想法 mfp hide 但是 当我添加时 我无法激活弹出窗口delegate关键字 否则 这是我到目前为止的代码 HTML div class
  • 如何更改 Rails 迁移 t.timestamps 以在 postgres 中使用 `timestamp(0) without timezone`

    我正在尝试找出如何更改本机数据类型t timestamps用于 Rails 迁移 postgres 中的默认类型是timestamp without timezone 我想要的是timestamp 0 without timezone 我想