我在 postgres 中有以下功能。这工作正常, 但如果这被两个用户同时调用,则会抛出异常:
Exception : ERROR: relation "callInfo" already exists.
CREATE OR REPLACE FUNCTION getObserverItem(wher INT)
RETURNS void
AS $$
declare
observerRecord RECORD;
c INT;
BEGIN
FOR observerRecord IN SELECT * FROM "CustomersVsObserver" WHERE observerid = wher LOOP
CREATE LOCAL TEMP TABLE callInfo AS SELECT * FROM "CustomerCallingInfo" WHERE customerid = observerRecord.id;
c := (SELECT *,MAX(callDate) AS lastDate FROM callInfo WHERE callState notnull);
.
. -- I use callInfo in multi select query by different condition.
.
DROP TABLE IF EXISTS callInfo;
END LOOP;
END; $$
LANGUAGE plpgsql;
我该如何处理?
最佳答案
解决方案是使用临时表。
创建临时表
CREATE TEMPORARY TABLE ...
并且仅在创建它的数据库 session 中可见。
根据您创建它的方式,它会在事务或数据库 session 结束时自动删除,但这与此处无关,因为您明确删除了表。
关于sql - 如何在函数内部创建一个不能从外部查看的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52500676/