多个schema存在同名表的情况下,set search_path在存储过程中能否起作用?

萧七 发布于 2014/10/16 20:44
阅读 380
收藏 0

例如:

1、在数据库中public模式下建立表a,插入1条记录;

    新建schema:s1,s2,在s1和s2中建立同名表a,分别插入2条和3条记录;

2、在public中建立一个存储过程sp1,在其中查询表a并返回记录数;

3、select sp1();

    此时返回的数量是1;

    现在set search_path=s1,public,然后运行select sp1(),此时返回数量还是1;

4、返回public模式,删除并重新建立sp1;

5、现在set search_path=s1,public,然后运行select sp1(),此时返回数量变成2,

     随后无论怎么改变search_path,存储过程的返回值始终是2;但是直接运行查询条数的语句,返回结果是正确的,也就是正确找到了第一个schema中的表。

    貌似存储过程第一次运行时使用的哪个search_path,以后就一直都使用这个值了,外部设置不再起作用。

    这是一个bug吗?求解答

    

加载中
返回顶部
顶部