gpt4 book ai didi

sql - rails 和 PSQL : how to convert a column of type STRING to UUID with a fallback value

转载 作者:数据小太阳 更新时间:2023-10-29 08:02:28 26 4
gpt4 key购买 nike

我正在使用名为“pgcrypto”的扩展来添加对 UUID 的支持。

目前我有一个名为 creator_id 的列,类型为字符串,但我想将其类型更改为 UUID。

一开始我试过:

change_column :communities, :creator_id, :uuid

我得到了这个:

PG::DatatypeMismatch: ERROR:  column "creator_id" cannot be cast automatically to type uuid
HINT: You might need to specify "USING creator_id::uuid".

所以我尝试了:

change_column :communities, :creator_id, "uuid USING creator_id::uuid"

问题是,在开发的早期阶段,它充满了甚至看起来不像 UUID 的占位符值,所以我收到以下错误:

PG::InvalidTextRepresentation: ERROR:  invalid input syntax for type uuid

所以当出现这样的异常时,我想回退到一些默认的 UUID。我该如何实现?

最佳答案

首先,使用uuid-ossppgcrypto 创建迁移

class EnableUuidExtension < ActiveRecord::Migration[5.2]
def change
enable_extension 'uuid-ossp'
enable_extension 'pgcrypto'
end
end

然后,创建另一个迁移以将 id 转换为 uuid。例如,

class ChangeIdToUuidInUser < ActiveRecord::Migration[5.2]
def change
add_column :users, :uuid, :uuid, default: 'uuid_generate_v4()', null: false
change_table :users do |t|
t.remove :id
t.rename :uuid, :id
end
execute 'ALTER TABLE users ADD PRIMARY KEY (id);'
end
end

然后用这个命令打开 postgres 数据库 psql -U username databaseName 您将进入 postgres shell,运行以下命令

=# CREATE EXTENSION pgcrypto;
=# \q

最后,运行rails db:migrate

关于sql - rails 和 PSQL : how to convert a column of type STRING to UUID with a fallback value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50944067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com