postgres 不删除不为空

Posted

技术标签:

【中文标题】postgres 不删除不为空【英文标题】:postgres doesn't drop not null 【发布时间】:2020-11-15 21:07:37 【问题描述】:

我将not null 放在主键列上,然后在我检查表的架构并且有not null 之后执行它

表:

-- auto-generated definition
create table warehouses
(
    id_warehouse       serial      not null
        constraint warehouse_pkey
            primary key,
    responsible_person varchar(30) not null
);

要删除的脚本不为空:

alter table warehouses
    drop constraint warehouse_pkey;

alter table warehouses
    alter id_warehouse drop not null;

alter table warehouses
    add constraint warehouse_pkey
        primary key (id_warehouse);

【问题讨论】:

PRIMARY KEY 必须是NOT NULL,所以当您执行primary key (id_warehouse) 时,您隐式添加了NOT NULL。如果您不希望这样,请将约束设置为 UNIQUE 而不是 PRIMARY KEY demo - metadata 你希望有尽可能多的NOT NULL列,这样你的数据质量好,你的SQL语句变得简单快捷。 【参考方案1】:

根据此处的信息:

https://www.postgresql.org/docs/current/sql-createtable.html

PRIMARY KEY(列约束)

PRIMARY KEY 约束指定表的一列或多列只能包含唯一(非重复)、非空值。一个表只能指定一个主键,不管是列约束还是表约束。

定义为PRIMARY KEY 的列也将具有NOT NULL 约束集。

【讨论】:

以上是关于postgres 不删除不为空的主要内容,如果未能解决你的问题,请参考以下文章

在 postgres 表中计算不为空的 json 键-> 值

在 postgres 中使用 liquibase 制作不区分大小写的表

使用postgres json当键为空时删除行

选择性过滤列值不为空的行 PostgreSQL

Postgres 合并为空 JSONB 数组

Postgres - 级联删除不起作用