Postgresql

如何將目前行傳遞給 Postgres 中的 Generated Column 函式?

  • July 31, 2022

Postgres 12+ 支持生成的列:https ://www.postgresql.org/docs/current/ddl-generated-columns.html

從文件來看,語法似乎是有限的——它強制人們顯式地命名生成列所依賴的列。

CREATE TABLE people (
   ...,
   height_cm numeric,
   height_in numeric GENERATED ALWAYS AS (height_cm / 2.54) STORED
);

有沒有辦法將整行傳遞給生成函式?就像是

CREATE TABLE people (
   ...,
   height_cm numeric,
   height_in numeric GENERATED ALWAYS AS generator_function(current_row) STORED
);

這似乎不可能。

如果它確實有效,它只能通過首先創建表,然後是函式,然後添加生成的列來工作。

但是,這樣做:

CREATE TABLE people 
(
 id int,
 height_cm numeric
);

create function generator_function(p_row people)
 returns numeric
as
$$
 select p_row.height_cm / 2.54;
$$
language sql
immutable;

alter table people
  add height_in numeric GENERATED ALWAYS AS (generator_function(people)) STORED;

結果是:

錯誤:不能在列生成表達式中使用整行變數

   詳細資訊:這將導致生成的列依賴於它自己的值。

所以,這似乎是不可能的。

引用自:https://dba.stackexchange.com/questions/315057