相关疑难解决方法(0)

在Postgresql中,强制在两列的组合上唯一

我想在postgresql中设置一个表,这样两列一起必须是唯一的.任何一个值都可以有多个值,只要没有两个值共享两者.

例如:

CREATE TABLE someTable (
    id int PRIMARY KEY AUTOINCREMENT,
    col1 int NOT NULL,
    col2 int NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

所以,col1col2可以重复,但不能在同一时间.所以,这是允许的(不包括id)

1 1
1 2
2 1
2 2
Run Code Online (Sandbox Code Playgroud)

但不是这个:

1 1
1 2
1 1 -- would reject this insert for violating constraints
Run Code Online (Sandbox Code Playgroud)

sql postgresql unique

160
推荐指数
4
解决办法
7万
查看次数

如何更改PostgreSQL表并使列唯一?

我在PostgreSQL中有一个表,其中的模式如下所示:

CREATE TABLE "foo_table" (
    "id" serial NOT NULL PRIMARY KEY,
    "permalink" varchar(200) NOT NULL,
    "text" varchar(512) NOT NULL,
    "timestamp" timestamp with time zone NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

现在,我希望通过ALTER-ing表使表中的固定链接唯一.任何人都可以帮我吗?

TIA

sql postgresql unique-constraint

145
推荐指数
4
解决办法
11万
查看次数

在postgresql中,如何仅当“deleted”为假时才使“name”唯一?

我有下表

CREATE TABLE "prm_project_service_product_and_services" (
  "id" BIGSERIAL NOT NULL,
  "name" VARCHAR(60) NOT NULL,
  "note" VARCHAR(256) NOT NULL,
  "version" BIGINT DEFAULT NULL,
  "created_date" TIMESTAMP DEFAULT NULL,
  "created_by_id" BIGINT DEFAULT NULL,
  "last_modified_date" TIMESTAMP DEFAULT NULL,
  "last_modified_by_id" BIGINT DEFAULT NULL,
  "deleted" BOOLEAN NOT NULL DEFAULT FALSE,
  PRIMARY KEY ("id"),
  CONSTRAINT project_service_product_and_services_unique UNIQUE ("name")
);
Run Code Online (Sandbox Code Playgroud)

我只想在是时才变得name独特,这可能吗?deletedfalse

sql postgresql postgresql-9.5

5
推荐指数
1
解决办法
1192
查看次数

Django 中具有唯一约束的软删除

我有这种布局的模型:

class SafeDeleteModel(models.Model):
    .....
    deleted = models.DateTimeField(editable=False, null=True)
    ......

class MyModel(SafeDeleteModel):
    safedelete_policy = SOFT_DELETE

    field1 = models.CharField(max_length=200)
    field2 = models.CharField(max_length=200)
    field3 = models.ForeignKey(MyModel3)
    field4 = models.ForeignKey(MyModel4)
    field5 = models.ForeignKey(MyModel5)

    class Meta:
        unique_together = [['field2', 'field3', 'field4', 'deleted'],]
Run Code Online (Sandbox Code Playgroud)

这里的场景是我从不希望用户删除数据。相反,删除只会隐藏记录。但是,我仍然希望所有非软删除的记录都遵守唯一键约束。基本上,我希望有尽可能多的重复删除记录,但只能存在一个唯一的未删除记录。所以我想包括“已删除”字段(由 django-safedelete 库提供),但问题变成了 Django 的唯一检查失败,“psycopg2.IntegrityError:重复键值违反唯一约束”对于 ['field2', 'field3' , 'field4', 'deleted'] 因为 NULL 不“等于” NULL 并且它在 PostgreSQL 中产生 false。

有没有办法用我的 Django 模型布局来强制执行 unique_together 约束?或者是否有更好的想法物理删除记录,然后将其移动到存档数据库,如果用户想要恢复记录,那么软件将在存档中查找记录并重新创建它?

database django postgresql django-models soft-delete

4
推荐指数
1
解决办法
1448
查看次数