postgres本地模式限定符

时间:2014-02-24 14:59:03

标签: sql postgresql

我正在使用postgres模式对视图和函数进行分组并将它们的多个版本保存在数据库中(有时需要向后兼容)因为在不同的模式中有相同函数的多个版本我不能简单地通过名称引用它需要编写完整的限定名称“schema.funcname”才能访问它。

当从schemaA中的另一个函数引用schemaA中的函数时,我总是必须编写schemaA.funcname。当我稍后重命名模式时,这会让我感到困惑 - 是否有一个限定符表明同一模式中的函数应该被使用?也许就像java中的“this”限定符一样?

希望能够理解我的意思

THX

1 个答案:

答案 0 :(得分:0)

您可以使用set schema更改当前会话的搜索路径:

create schema test1;
create schema test2;

create function test1.f() returns int as $body$ begin return 1; end; $body$ language plpgsql;
create function test2.f() returns int as $body$ begin return 2; end; $body$ language plpgsql;

set schema 'test1';
select f();

set schema 'test2';
select f();

您还可以将search_path添加到功能定义中:

create or replace function test1.x() returns int as $body$ begin return 1; end; $body$ language plpgsql;
create or replace function test1.f() returns int as $body$ begin return x(); end; $body$ language plpgsql set search_path = 'test1';

create or replace function test2.x() returns int as $body$ begin return 2; end; $body$ language plpgsql;
create or replace function test2.f() returns int as $body$ begin return x(); end; $body$ language plpgsql set search_path = 'test2';

select test1.f();

select test2.f();