0

私のスキーマでは、primaryID と SearchID が必要です。すべての SearchID は、primaryID に先頭のテキストを加えたものです。これを次のようにする必要があります。

  • プライマリ ID = 1
  • 検索 ID = 検索 1

PrimaryID は autoincrement に設定されているため、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のテーブル修飾が必要です。search_idテーブルの列としてが見つからないため、Postgresは次に引数tblを取る関数を探します。tbl

事実上、t.search_idはの構文バリアントにすぎませsearch_id(t)んが、使用法が非常に直感的になります。

于 2012-12-06T13:13:59.283 に答える