gpt4 book ai didi

postgresql - 创建引用不存在的表或列的 SQL 函数(尚)

转载 作者:行者123 更新时间:2023-11-29 11:52:21 25 4
gpt4 key购买 nike

我想通过 psql 在空数据库中加载一些 SQL 函数:

psql -d my_database -f fuctions.sql --set ON_ERROR_STOP=1 

我使用 --set ON_ERROR_STOP=1 因为我希望在脚本包含错误时 psql 失败。

functions.sql的内容是:

CREATE or REPLACE FUNCTION test_function() RETURNS INT AS $$
SELECT id from test_table;
$$ LANGUAGE sql;

我的问题是,psql 在加载函数时检查 test_table 是否存在,但失败并出现此错误:

ERROR:  relation "test_table" does not exist LINE 2: SELECT id from test_table;

但我不希望 psql 检查该表是否存在,因为稍后我将创建该表。

以下解决方法可行,但我无法使用它们:

  • 忽略错误。如果脚本包含 sql 语法错误,我希望 psql 以错误退出。
  • 使用 plpgsql 函数代替 sql。我当然可以,但是简单的 sql 函数通常是最好的选择。
  • 首先创建表格。我的真实场景其实比这个例子更复杂。

最佳答案

您可以在创建函数之前将配置变量 check_function_bodies 设置为 false。

例如,即使 test_table 不存在,这也能让您创建测试函数:

BEGIN;
SET LOCAL check_function_bodies TO FALSE;
CREATE or REPLACE FUNCTION test_function() RETURNS INT AS $$
SELECT id from test_table;
$$ LANGUAGE sql;
COMMIT;

文档:http://www.postgresql.org/docs/9.5/static/runtime-config-client.html#GUC-CHECK-FUNCTION-BODIES

关于postgresql - 创建引用不存在的表或列的 SQL 函数(尚),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29162066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com