Postgres在另一个表中添加一个不为空的约束值

2022-01-20 06:37:33 标签 databasepostgresqlback

我想知道是否有可能创建一个非空约束上的列取决于另一个表中的另一列的值。

(在postgres)

为例:

CREATE TABLE IF NOT EXISTS Ref (
    id SERIAL PRIMARY KEY,
    required BOOLEAN DEFAULT FALSE
);
CREATE TABLE IF NOT EXISTS Value (
    id SERIAL PRIMARY KEY,
    refId INTEGER REFERENCES Ref(id) NOT NULL,
    value TEXT,
);

所以这里我想添加一个约束NOT NULL值,如果需要是TRUE。

所以我试图使用一些检查,但它似乎只检查列在同一表:(。

提前谢谢。

我明白,当required field is equal to true then 字段等于true,那么我们必须将NOT NULL设置为Value table's field else set to must be NULL.表的其他字段必须为NULL。

您可以使用PostgreSQL检查约束来实现这一点。首先,我们必须创建一个用于检查字段值的函数。

CREATE OR REPLACE FUNCTION get_required(p_id integer, p_value text)
RETURNS BOOLEAN AS
$$
declare 
    v_ret bool;
begin
    select required into v_ret from tbl_ref where id = p_id;
    if (v_ret)and(p_value is null) then 
        return false; 
    end if;
    return true; 
END;
$$ LANGUAGE PLpgSQL;

然后我们可以在create table进程上使用这个函数:

CREATE TABLE tbl_val (
    id serial4 NOT NULL,
    ref_id int4 NOT NULL,
    "value" text NULL,
    CONSTRAINT tbl_val_check CHECK (get_required(ref_id, "value")),
    CONSTRAINT tbl_val_pkey PRIMARY KEY (id),
    CONSTRAINT tbl_val_fk FOREIGN KEY (ref_id) REFERENCES tbl_ref(id)
);
阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码