繁体   English   中英

列重命名后 Function 调用失败(错误 42703“列不存在”)

[英]Function call fails after column renaming (error 42703 “column does not exist”)

简单场景:

CREATE TABLE foo (bar int);

INSERT INTO foo VALUES (42);

CREATE FUNCTION baz() RETURNS int AS $$
SELECT bar
FROM foo
$$ LANGUAGE SQL;

SELECT baz();

这有效并返回 42。

我不喜欢我的列命名,所以我重命名它:

ALTER TABLE foo RENAME bar TO qux;

但是现在如果我再次调用 function:

SELECT baz();

[42703] 错误:列“栏”不存在

SQL function "baz" 在内联期间

我希望将重命名为“级联”到 function 主体,因为 PostgreSQL 可以防止创建具有无效列引用的函数。

我真的必须重新创建每个 function 以旧名称引用该列吗? 使用版本 10.7。

文档说 function 主体是一个字符串常量,其含义取决于语言 这在运行时由语言处理程序解释,并且数据库服务器没有关于如何解释函数源文本的内置知识

因此 PostgreSQL 不跟踪依赖项,并且 function 按名称而不是 object ID 引用表和列(就像视图一样)。

因此,PostgreSQL 不能自动更改 function 正文字符串,因为其中引用的表列以 PostgreSQL 的语法未知的语言更改其名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM