如何将当前行传递给 Postgres 中的生成列函数?

Pra*_*wal 4 postgresql functions computed-column postgresql-12

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
);
Run Code Online (Sandbox Code Playgroud)

有没有办法将整行传递给生成函数?就像是

CREATE TABLE people (
    ...,
    height_cm numeric,
    height_in numeric GENERATED ALWAYS AS generator_function(current_row) STORED
);
Run Code Online (Sandbox Code Playgroud)

小智 6

这似乎不可能。

\n

如果它确实起作用,则只能通过首先创建表,然后创建函数,然后添加生成的列来起作用。

\n

然而,这样做:

\n
CREATE TABLE people \n(\n  id int,\n  height_cm numeric\n);\n\ncreate function generator_function(p_row people)\n  returns numeric\nas\n$$\n  select p_row.height_cm / 2.54;\n$$\nlanguage sql\nimmutable;\n\nalter table people\n   add height_in numeric GENERATED ALWAYS AS (generator_function(people)) STORED;\n
Run Code Online (Sandbox Code Playgroud)\n

结果是:

\n
\n

错误:无法在列生成表达式中使用整行变量
\n\xc2\xa0\xc2\xa0\xc2\xa0详细信息:这将导致生成的列依赖于其自身的值。

\n
\n

所以,这似乎不可能。

\n