我正在使用PostgreSQL,希望防止某些必需的字符变化(VARCHAR)字段允许空字符串输入.

这些字段还需要包含唯一值,所以我已经在使用唯一约束;但是,这并不阻止原始(唯一)空值.

基本示例,其中用户名必须唯一且不为空

| id | username | password |
+----+----------+----------+
| 1  | User1    | pw1      | #Allowed
| 2  | User2    | pw1      | #Allowed
| 3  | User2    | pw2      | #Already prevented by constraint
| 4  | ''       | pw2      | #Currently allowed, but needs to be prevented

推荐答案

使用check constraint:

CREATE TABLE foobar(
  x TEXT NOT NULL UNIQUE,
  CHECK (x <> '')
);

INSERT INTO foobar(x) VALUES('');

Postgresql相关问答推荐

当通过PostgreSQL FDW中的视图使用时,年龄函数的计算方式不同

无法在timscaleDb中创建Hypertable

GORM Golang SQL查询执行不区分大小写的搜索不起作用

PostgreSQL:动态SELECT查询

在插入时创建一个触发器,在PostgreSQL中的另一个表上创建另一个触发器

postgresql中多个左连接的空结果

如何判断上次在 TimescaleDB 上运行连续聚合作业(job)的时间

PostgreSql maintenance_work_mem 在索引创建期间增加

PostgreSQL比较两个jsonb对象

是否有 postgres CLOSEST 运算符?

获取带有时区偏移的日期

需要将整个 postgreSQL 数据库加载到 RAM 中

断言错误:Django-rest-Framework

为什么 PostgreSQL 数组访问在 C 中比在 PL/pgSQL 中快得多?

从没有行的计数中获取 0 值

设置 Phoenix 框架和 Ecto 以使用 UUID:如何插入生成的值?

错误:ERROR: table name specified more than once

使用 RPostgreSQL 写入特定模式

如何在 JPA 中使用 Postgres JSONB 数据类型?

PostgreSQL 9.1:如何连接数组中的行而不重复,加入另一个表