是否可以定义默认情况下创建新表的模式?(由"不合格的表名称"引用.)
我已经看到了在Postgres中使用"搜索路径"的一些细节,但我认为它只在检索数据时有效,而不是创建.
我有一堆SQL脚本,它们创建了许多表.我没有修改脚本,而是希望默认情况下在特定模式中设置数据库创建表 - 当它们具有非限定名称时.
这可能吗?
我的用户和我不使用PL/pgSQL中的函数重载.我们每个(模式,名称)元组总是有一个函数.因此,我们只想按名称删除函数,更改其签名而不必先删除它等.例如,考虑以下函数:
CREATE OR REPLACE FUNCTION myfunc(day_number SMALLINT)
RETURNS TABLE(a INT)
AS
$BODY$
BEGIN
RETURN QUERY (SELECT 1 AS a);
END;
$BODY$
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
为了节省时间,我们想按如下方式调用它,而不用限定1 ::SMALLINT
,因为只有一个名为myfunc的函数,它只有一个名为day_number的参数:
SELECT * FROM myfunc(day_number := 1)
Run Code Online (Sandbox Code Playgroud)
没有歧义,值1与SMALLINT
类型一致,但PostgreSQL抱怨:
SELECT * FROM myfunc(day_number := 1);
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)ERROR: function myfunc(day_number := integer) does not exist LINE 12: SELECT * FROM myfunc(day_number := 1); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts.
当我们从Python调用这些函数时,我们使用一个包装器来查找函数的签名并使用类型限定参数.这种方法有效,但似乎有可能改进.
有没有办法完全关闭功能重载?