1

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

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

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

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

我认为复合类型是我正在寻找的,但不是每次手动设置值,我想通过仅设置“源”和“id”来自动获取它们

我对 postgresql 还很陌生,所以欢迎任何帮助。谢谢你。

4

1 回答 1

1

你可以在你的表中有一个复合键:

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;
于 2015-10-30T15:59:56.723 回答