首页 > 解决方案 > Postgres - 具有约束的数组日期列

问题描述

我正在尝试创建一个表,该表test_table具有一个列,该列year需要一个“年”数组,如下所示:

CREATE TABLE avg_yearly_currencies_used (
    id serial PRIMARY KEY,
    year date[],
    CONSTRAINT first_jan_check CHECK ( date_trunc('year', year) = year )
);

CONSTRAINT检查日期是否采用以下格式:2010-01-012012-01-01

如果year列不是数组,则上述命令可以正常工作并创建表。但是,通过将日期设为数组并使用CONSTRAINT,我收到以下错误:

ERROR: function date_trunc(unknown, date[]) does not exist

如何将 应用于CONSTRAINT数组列year

标签: sqlpostgresql

解决方案


您可以使用以下方法

  1. 编写一个自定义函数来检查数组中的所有值是否都符合条件:
create function check_date (
    date_ date[]) returns boolean as 
    $$
    declare
    result boolean;
    begin
    select bool_and (date_trunc('year', n) = n) into result
    from unnest(date_) s(n);
    return result;
    end;
    $$ 
    language plpgsql immutable;
  1. 在检查约束中添加上述功能
CREATE TABLE avg_yearly_currencies_used (
    id serial PRIMARY KEY,
    year date[],
    CONSTRAINT first_jan_check CHECK (check_date(year))
);

演示


推荐阅读