kingbase有一些古怪的设置,search_path就是其中一例。这个命令是设置用户默认的schema。如果不设置,比如用户user1想读取schema2下的表,那在sql中就要指明schema。如:
select * from schema2.table1;
如果不想这么折腾,那就将schema2指定为user1的默认schema:
alter user user1 set search_path to schema2;
但是!以上这个句子有问题!会造成user1的默认schema只是schema2,从而丢失了公共schema public的默认访问权。其实这个search_path和windows环境变量中的path类似,它可以指定多个。上面指定了一个,覆盖了默认,原本天然可以访问public下元素的,现在就不行了。前不久,我们有个kingbase库安装了kingbaseGIS,加入了对空间数据的支持。而这些空间函数,位于public下:
结果执行下面SQL,死活不行,总是报错,认不了这个ST_Polygon。
SELECT ST_Polygon(ST_GeomFromText(
'LINESTRING(75.15 29.53,77 29,77.6 29.5, 75.15 29.53)'),
4326);
将用户的权限赋到无所不能了,还是不行。后来还是人大金仓的人发现了问题症结所在,就是这个seach_path问题。正确的做法是:
alter user user1 set search_path to schema2,PUBLIC,SYS_CATALOG;
kingbase源自postgreSQL。估计这个毛病是继承下来的。这个search_path简直莫名其妙,不知所谓。