创建时计算的布尔列 table
Computed boolean column while creating table
我正在尝试使用计算的布尔值
创建table
CREATE TABLE parts
(
Id SERIAL PRIMARY KEY,
Weight INTEGER NOT NULL CHECK(Weight > 0),
Color VARCHAR(10),
Price INTEGER NOT NULL CHECK(Price > 0),
IsCheap BOOL AS (CASE WHEN Price <= 1000 THEN True ELSE False END),
Name VARCHAR(30)
);
但是出现这个错误
ERROR: syntax error at or near "AS"
LINE 7: IsCheap BOOL AS (CASE WHEN Price <= 1000 THEN True ELSE Fal...
我也试过用 BIT 代替 BOOL - 同样的错误。不知道为什么它不起作用。
如果要使用计算列,则需要 Postgres 12(2019-10-03 发布)。
和 as
本身是不够的。语法要求使用 generated always as ...
as documented in the manual:
create table parts
(
id serial primary key,
weight integer not null check (weight > 0),
color varchar(10),
price integer not null check (price > 0),
is_cheap boolean generated always as (price <= 1000) stored,
name varchar(30)
);
如果您不使用 Postgres 12,那么我建议创建一个只包含 price <= 1000 as is_cheap
的视图,因为该属性的计算非常便宜,而且不需要存储它。
我正在尝试使用计算的布尔值
创建tableCREATE TABLE parts
(
Id SERIAL PRIMARY KEY,
Weight INTEGER NOT NULL CHECK(Weight > 0),
Color VARCHAR(10),
Price INTEGER NOT NULL CHECK(Price > 0),
IsCheap BOOL AS (CASE WHEN Price <= 1000 THEN True ELSE False END),
Name VARCHAR(30)
);
但是出现这个错误
ERROR: syntax error at or near "AS"
LINE 7: IsCheap BOOL AS (CASE WHEN Price <= 1000 THEN True ELSE Fal...
我也试过用 BIT 代替 BOOL - 同样的错误。不知道为什么它不起作用。
如果要使用计算列,则需要 Postgres 12(2019-10-03 发布)。
和 as
本身是不够的。语法要求使用 generated always as ...
as documented in the manual:
create table parts
(
id serial primary key,
weight integer not null check (weight > 0),
color varchar(10),
price integer not null check (price > 0),
is_cheap boolean generated always as (price <= 1000) stored,
name varchar(30)
);
如果您不使用 Postgres 12,那么我建议创建一个只包含 price <= 1000 as is_cheap
的视图,因为该属性的计算非常便宜,而且不需要存储它。