【问题标题】:Computed boolean column while creating table创建表时计算的布尔列
【发布时间】:2019-10-14 09:08:24
【问题描述】:

我正在尝试使用计算的布尔值创建表

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。

标签: sql postgresql calculated-columns


【解决方案1】:

如果您想使用计算列,您需要 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 &lt;= 1000 as is_cheap 的视图,因为该属性的计算非常便宜且无需存储它。

【讨论】:

    猜你喜欢
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 2021-11-30
    • 1970-01-01
    相关资源
    最近更新 更多