根据官网文档,MOT表是不支持JOIN磁盘表的,在gsql下执行也会报错,但是偶然发现,在pgplsql语句块里(包括存储过程和函数),MOT表可以JOIN磁盘表,不知这是个有用的功能还是个bug,复现操作如下:
create table emp1(
empno int primary key,
ename varchar(10),
job varchar(9),
deptno numeric(2));
INSERT INTO emp1 VALUES (1,'SMITH','CLERK',20);
INSERT INTO emp1 VALUES (2,'ALLEN','SALESMAN',10);
INSERT INTO emp1 VALUES (3,'WARD','SALESMAN',30);
create foreign table emp1mot(
empno int primary key,
ename varchar(10),
job varchar(9),
deptno numeric(2));
INSERT INTO emp1mot VALUES (1,'SMITH','CLERK',60);
INSERT INTO emp1mot VALUES (2,'ALLEN','SALESMAN',50);
INSERT INTO emp1mot VALUES (3,'WARD','SALESMAN',40);
INSERT INTO emp1mot VALUES (4,'JONES','MANAGER',30);
INSERT INTO emp1mot VALUES (5,'JONES','MANAGER',20);
CREATE OR REPLACE PROCEDURE proc1()
AS
DECLARE
rec record;
BEGIN
for rec in (select * from emp1 e1 join emp1mot e1m on e1.deptno = e1m.deptno)
loop
RAISE NOTICE '%, %, %, %', rec."empno", rec."ename", rec."job", rec."deptno";
end loop;
END;
/
call proc1()
本文探讨了在PostgreSQL PL/pgSQL环境下,MOT表(内存对象表)与磁盘表的非官方JOIN操作。作者发现了一个可能的异常行为,通过实例展示了如何在存储过程和函数中实现这种连接,并提出了是否为功能误用或潜在bug的问题。
584

被折叠的 条评论
为什么被折叠?



