从其他列值自动生成列值并用作 PRIMARY KEY

Generate column value automatically from other columns values and be used as PRIMARY KEY

我有一个 table,其中有一列名为 "source" 和 "id"。此 table 是从开放数据数据库中填充的。 "id" 不能是唯一的,因为我的数据来自其他具有自己的 ID 系统的数据库。拥有相同的 ID 但真正不同的数据确实存在风险。

我想创建另一个将 source 和 id 组合成一个值的列。

"openDataA" + 123456789 -> "openDataA123456789"
"openDataB" + 123456789 -> "openDataB123456789"

我看过使用 || 的例子和连接值的功能。这很好,但我想将第三列作为我的主键,以避免重复,并创建一个真正唯一的 ID,我可以在不进行太多计算的情况下进行查询,并且我可以将其用作其他 table 的外键约束.

我认为复合类型是我正在寻找的,但我不想每次都手动设置值,而是想通过仅设置 "source" 和 "id"[=11 来自动获取它们=]

我是 postgresql 的新手,欢迎任何帮助。 谢谢。

您可以在 table:

中使用复合键
CREATE TABLE mytable (
    source VARCHAR(10),
    id VARCHAR(10),
    PRIMARY KEY (source, id)
);

如果你真的想要一个连接的列,你可以创建一个视图来显示它:

CREATE VIEW myview AS 
SELECT *, source || id AS primary_key
FROM   mytable;