PostgreSQL - 创建primaryID表副本的规则

时间:2012-12-06 12:24:40

标签: sql postgresql relational-database

在我的架构中,我想要一个primaryID和一个SearchID。对于每个SearchID,它是primaryID加上一些文本。我需要这个看起来像这样:

  • PrimaryID = 1
  • SearchID = Search1

由于PrimaryID设置为自动增量,我希望我可以使用postgresql规则来执行以下操作(伪代码)

IF PRIMARYID CHANGES
{
SEARCHID = SEARCH(PRIMARYID)
}

这有望在主ID更新后自动发生。那么,这是实现这一目标的最佳方式吗?任何人都可以举例说明它是如何完成的吗?

谢谢

1 个答案:

答案 0 :(得分:1)

我会使用“生成”列 - PostgreSQL的特殊功能。假设您的表名为tbl,并且串行主键名为tbl_id

CREATE FUNCTION search_id(t tbl)
  RETURNS text STABLE LANGUAGE SQL AS
$$
SELECT 'Search' || $1.tbl_id;
$$;

然后你可以:

SELECT t.tbl_id, t.search_id FROM tbl t;

在这种情况下, t .search_id中的表格资格是需要。由于找不到search_id作为表tbl的列,Postgres会查找一个以tbl作为参数的函数。

实际上,t.search_id只是search_id(t)的语法变体,但使用非常直观。