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然而,这样做:
\nCREATE 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错误:无法在列生成表达式中使用整行变量
\n
\n\xc2\xa0\xc2\xa0\xc2\xa0详细信息:这将导致生成的列依赖于其自身的值。
所以,这似乎不可能。
\n