【发布时间】:2021-01-14 06:01:31
【问题描述】:
我在 postgres 中创建了一个表,其中包含基于从 csv 导入的各种列。由于可以通过一些更改重新上传 csv,并且我不希望重新上传在未更改的行上创建重复项,因此我添加了一个约束和唯一索引,其中包含大多数列。这样做有任何性能问题吗?有没有更好的方法来解决这个问题?
CREATE TABLE IF NOT EXISTS table_a (
id SERIAL PRIMARY KEY,
table_b_id SERIAL REFERENCES table_b(id) ON DELETE CASCADE,
column_a INT,
column_b INT,
column_c BOOLEAN,
created_time BIGINT NOT NULL,
CONSTRAINT "table_a_key" UNIQUE ("table_b_id", "column_a", "column_b", "column_c")
);
【问题讨论】:
-
与您的问题无关,但是:外键列永远不应定义为
serial,这没有任何意义。serial只是integer not null default nextval('some_seq')的简写(“宏”) - 为什么要从外键列的序列中获取默认值? -
@a_horse_with_no_name - 感谢您指出这一点,所以 table_b_id 实际上应该是 int 吗?我只是保持它与 table_b 中列 id 的类型相同
-
是的,
table_b_id应该是int,它是与引用的表相同的类型。如果您改用更现代的identity列,这会更明显。
标签: sql postgresql performance