在我的架构中,我想要一个primaryID和一个SearchID。对于每个SearchID,它是primaryID加上一些文本。我需要这个看起来像这样:
由于PrimaryID设置为自动增量,我希望我可以使用postgresql规则来执行以下操作(伪代码)
IF PRIMARYID CHANGES
{
SEARCHID = SEARCH(PRIMARYID)
}
这有望在主ID更新后自动发生。那么,这是实现这一目标的最佳方式吗?任何人都可以举例说明它是如何完成的吗?
谢谢
答案 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)
的语法变体,但使用非常直观。