簡體   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