相关疑难解决方法(0)

如何使 typeorm、postgres 中的 3 列组合独一无二?

如何才能实现数据库中没有 2 条相同的记录且这 3 列的值组合相同?

  @Column()
  sector: string;

  @Column()
  row: string;

  @Column()
  number: string;
Run Code Online (Sandbox Code Playgroud)

postgresql typescript typeorm nestjs

15
推荐指数
1
解决办法
1万
查看次数

Postgres唯一约束不强制唯一性

这是我的约束:

CREATE UNIQUE INDEX index_subscriptions_on_user_id_and_class_type_id_and_deleted_at
  ON subscriptions
  USING btree
  (user_id, class_type_id, deleted_at);
Run Code Online (Sandbox Code Playgroud)

此查询证明约束实际上不起作用:

SELECT id, user_id, class_type_id,deleted_at
FROM subscriptions;
Run Code Online (Sandbox Code Playgroud)

这是输出:

在此输入图像描述

为什么没有强制执行唯一性?

postgresql

5
推荐指数
2
解决办法
2047
查看次数

信息模式中referential_constraints.unique_constraint_* 列的NULL 值

在 Postgres 10 中我声明了以下内容:

create table test_abc (
    pk integer not null,
    id integer not NULL,
    id2 integer not null,
    PRIMARY KEY (pk)
);
CREATE UNIQUE INDEX test_abc_ids ON test_abc(id,id2);
Run Code Online (Sandbox Code Playgroud)

然后是第二个表,其中 FK 引用第一个表:

create table test_def (
    id integer not null,
    abc_id integer,
    abc_id2 integer,
    PRIMARY KEY (id),
    FOREIGN KEY (abc_id,abc_id2) references test_abc(id,id2)
);
Run Code Online (Sandbox Code Playgroud)

现在考虑此查询的输出:

SELECT unique_constraint_catalog, unique_constraint_schema, unique_constraint_name
FROM   information_schema.referential_constraints r
WHERE  r.constraint_name = 'test_def_abc_id_fkey'
----------------------
NULL NULL NULL
Run Code Online (Sandbox Code Playgroud)

所有unique_constraint_*列都有空值。

Postgres 文档看来这些元列应该包含

包含外键约束引用的唯一或主键约束的 [object] 的名称(始终是当前数据库) …

sql postgresql foreign-keys information-schema database-metadata

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

唯一约束与唯一索引?

是否有区别:

CREATE TABLE p(
    product_no integer,
    name text UNIQUE,
    price numeric
);
Run Code Online (Sandbox Code Playgroud)

和:

CREATE TABLE p(
        product_no integer,
        name text,
        price numeric
 );
CREATE UNIQUE INDEX customername
  ON p
  USING btree
  (name COLLATE pg_catalog."default");
Run Code Online (Sandbox Code Playgroud)

在这两种情况下名称都是唯一的吗?当索引唯一时意味着什么?

编辑Postgres 唯一约束与索引没有回答我的问题。它考虑了 FK 的情况。我的问题与 FK 无关。我只想知道这两个操作在这个不涉及 FK 的例子中是否等效。

sql postgresql

2
推荐指数
1
解决办法
888
查看次数

当我们使用Unique索引而不是非Unique索引时,性能有什么提升吗?

我知道如果数据是唯一的,理论上唯一索引会比非唯一索引更快。

因为唯一索引能够提供更多的信息,让查询优化器选择更有效的执行计划。

我正在做一些测试,想证明唯一索引可能比执行计划中的非唯一索引更好,但结果显示它们是相同的......

CREATE TABLE T3(
    ID INT NOT NULL,
    val INT NOT NULL,
    col1 UUID NOT NULL,
    col2 UUID NOT NULL,
    col3 UUID NOT NULL,
    col4 UUID NOT NULL,
    col5 UUID NOT NULL,
    col6 UUID NOT NULL
);

CREATE INDEX IX_ID_T3 ON T3 (ID);
CREATE UNIQUE INDEX UIX_ID_T3 ON T3 (ID);

INSERT INTO T3
SELECT i,
       RANDOM() * 1000000,
       md5(random()::text || clock_timestamp()::text)::uuid,
       md5(random()::text || clock_timestamp()::text)::uuid,
       md5(random()::text || clock_timestamp()::text)::uuid,
       md5(random()::text || clock_timestamp()::text)::uuid,
       md5(random()::text || clock_timestamp()::text)::uuid,
       md5(random()::text || clock_timestamp()::text)::uuid
FROM generate_series(1,1000000) …
Run Code Online (Sandbox Code Playgroud)

postgresql indexing unique-index sql-execution-plan

2
推荐指数
1
解决办法
2290
查看次数