PostgreSQL 12.4文書のまとめノート　5章③生成列

#### [PostgreSQL 12.4文書](https://www.postgresql.jp/document/12/html/)ノート

- 生成列
    - 格納生成列 posgreで使用可能。生成列、挿入時に計算される
    - 仮想生成列 posgreで使用不可。読み出し時計算される。
- 生成列の制約
    - 書き込み不可(IMMUTABLE)
    - 生成列は他テーブル参照不可
    - 生成列は生成列を参照不可
    - 生成列を持った上にデフォルト値を持つということもできない
    - tableoid以外のシステム列を参照不可

- ある大学の入試で、数学に8割、地理に2割の重みをおいた点数を自動で計算する生成列を考えることができる。
    - 実務的でわざわざこのような列を作るとは思えないが、例なので。

```
-- とりあえずテストの点数がnumericでもよいとしておく。

drop TABLE if EXISTS univ_entrance_exam;
CREATE TABLE univ_entrance_exam (
    student_no SERIAL,
    inserted_time timestamp DEFAULT CURRENT_TIMESTAMP,
    math_test numeric,
    math_real_score numeric GENERATED ALWAYS AS (math_test * 0.8) STORED,
    Geography_test numeric,
    Geography_real_score numeric GENERATED ALWAYS AS (Geography_test * 0.2) STORED,
    PRIMARY KEY (student_no));

insert into univ_entrance_exam (student_no,inserted_time,math_test,math_real_score,Geography_test,Geography_real_score)
 VALUES (DEFAULT,DEFAULT,10,DEFAULT,50,DEFAULT);
insert into univ_entrance_exam (student_no,inserted_time,math_test,math_real_score,Geography_test,Geography_real_score)
 VALUES (DEFAULT,DEFAULT,20,DEFAULT,90,DEFAULT);
insert into univ_entrance_exam (student_no,inserted_time,math_test,math_real_score,Geography_test,Geography_real_score)
 VALUES (DEFAULT,DEFAULT,80,DEFAULT,40,DEFAULT);

SELECT *,
math_real_score+Geography_real_score as Overall_score
from univ_entrance_exam;

```

このような結果を得ることができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1347377/a9ea68b5-64fb-9fe1-9943-cd80ef3899e0.png)

感想
生成列から生成列を参照できないので、この例だと総合点などは計算できない。
ただし、それができたとしても変更に弱くなる等困る点も多い気がするので必要性が高く動的に求めたい列をちょっと求められるくらいの機能だと考えておこう。


<details><summary>ライセンス</summary><div>

法的告知

Copyright © 1996-2020 PostgreSQLはPostgreSQLグローバル開発チームが著作権を有します。

Copyright © 1994-1995 Postgres95はカリフォルニア大学評議員が著作権を有します。

Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies. [訳注：日本語は参考程度と解釈してください。] 上記の著作権表示、および 本段落と続く2つの段落を全てのコピーに含めることを条件として、無料かつ 書面による許可なしに、このソフトウェアとドキュメントの使用、複製、改変、 頒布をどのような目的にでも許可します。

IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. カリフォルニア大学は、いかなる当事者に対しても、利益の喪失を含む、 直接的、間接的、特別、偶然あるいは必然的にかかわらず生じた 損害について、たとえカリフォルニア大学がこれらの損害の可能性について 知らされていたとしても、一切の責任を負いません。

THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN 「AS-IS」 BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. カリフォルニア大学は、商用目的における暗黙の保証と、特定目的での 適合性に関してはもとより、これらに限らず、いかなる保証もしません。 以下に用意されたソフトウェアは「そのまま」を基本原理とし、 カリフォルニア大学はそれを維持、支援、更新、改良あるいは修正する 義務を負いません。

</div></details>