ruby-on-rails - 无法在 postgresql 中将列的类型从 uuid 更改为 INT
问题描述
我在railscalibration_sessions中有表:
t.uuid "calibration_cycle_id", null: false
t.datetime "created_at", null: false
t.integer "creator_id", null: false
t.datetime "deleted_at"
t.string "name", null: false
t.jsonb "state_transition_progress", default: []
t.string "status", null: false
t.datetime "updated_at", null: false
t.integer "updater_id", null: false
t.uuid "uuid", default: -> { "uuid_generate_v4()" }, null: false
t.index ["calibration_cycle_id", "status", "deleted_at"], name: "index_calibration_sessions_on_cycle_and_status_and_deleted_at", using: :btree
t.index ["creator_id"], name: "index_calibrations_sessions_on_creator_id", using: :btree
以上是表的架构。
我正在尝试将列calibration_cycle_id 的类型更改为INT。
TRUNCATE TABLE calibrations_sessions;
ALTER TABLE calibrations_sessions ALTER COLUMN calibration_cycle_id TYPE INT USING calibration_cycle_id::integer;
我怎么会收到以下错误:
ERROR: cannot cast type uuid to integer
LINE 1: ...ation_cycle_id TYPE INT USING calibration_cycle_id::integer;
我在这里做错了什么?
解决方案
UUID 是 32 位的类型,无法自动转换为太小的 int 数据类型。
您需要编写自己的转换函数。参见例如从 PostgreSQL 中的 uuid 的大端创建大整数
推荐阅读
- python - Differentiating between a python sibling import vs importing a function/class
- c++ - 为什么我的 main.cpp 不打印头文件中的任何内容
- nginx - 将 .Net Core Web API 托管到 nginx(不是代理)
- python - 获取 post 方法的 json
- java - 如何切换到父标签到新标签并在 Chrome 浏览器上打开新 URL?
- ruby-on-rails - Rails 表单提交操作类似于 link_to
- javascript - 如何比较以前和更新的道具 Vue?
- java - “^^^”上的Java拆分字符串
- java - 遍历列表以查找对象相等
- ios - 如何在 swift 的扩展中声明 NSLayoutConstraint 类型的变量