我有一张看起来像这样的表:
CREATE TABLE "TestResults" (
"Id" text PRIMARY KEY,
"Name" text NOT NULL UNIQUE,
"Result" text CHECK ("Comment" IN ('Pass', 'Fail')),
"CreatedBy" text NOT NULL,
"CreatedOn" timestamp with time zone NOT NULL,
);
Run Code Online (Sandbox Code Playgroud)
我们使用的是 PostgreSQL 9.4
用户目前可以选择Pass
或Fail
从下拉菜单中选择,我们一直将这些字符串存储在数据库中的Result
列中。我们想将其更改为布尔值。
如何Result
在保留用户已经输入的值的同时将列从文本更改为布尔值?
谢谢你。
任何时候你想改变一个列的类型但没有从旧值到新值的默认转换,你想使用一个USING 子句来指定如何将旧值转换为新值:
可选
USING
子句指定如何从旧列值计算新列值;如果省略,则默认转换与从旧数据类型转换为新数据类型的赋值相同。一个USING
如果从旧到新类型没有隐含或者赋值转换必须提供条款。
因此,首先摆脱 CHECK 约束,您可以通过执行\d "TestResults"
from找到名称,psql
但它可能是"TestResults_Result_check"
:
alter table "TestResults" drop constraint "TestResults_Result_check";
Run Code Online (Sandbox Code Playgroud)
然后使用 ALTER COLUMN(带有 USING 子句)来更改类型:
alter table "TestResults"
alter column "Result"
set data type boolean
using case
when "Result" = 'Pass' then true
when "Result" = 'Fail' then false
else null
end;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2131 次 |
最近记录: |