0

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

  • 主 ID = 1
  • 搜索 ID = 搜索 1

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

IF PRIMARYID CHANGES
{
SEARCHID = SEARCH(PRIMARYID)
}

这有望在 primaryID 更新并自动发生之后发生。那么,这是实现这一目标的最佳方式吗?谁能提供一个例子来说明它是如何完成的?

谢谢

4

1 回答 1

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 中的表限定。由于没有作为 table 的列找到,Postgres 会寻找一个以next 为参数的函数。search_idtbltbl

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

于 2012-12-06T13:13:59.283 回答