sql - 如何在函数内部创建一个不能从外部查看的表?

标签 sql postgresql local

我在 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/

相关文章:

mysql - 如何查询 has_many 关联表的参数?

postgresql - 是否可以为具有更多死元组的表运行实时数据库的 vacuum full verbose 命令?

html - 如何让浏览器打开本地文件而不是下载?

java - 如何控制Java中变量的可见性?

javascript - 读写 使用 javascript 或 jquery 覆盖外部文件

mysql - 理解mysql中的相关性

php - 如何将一行作为一个类进行回显?

java - Apache Felix 缺少 javax.sql.Datasource

填写个人资料字段时,Django 用户创建在管理中失败

postgresql - 传递一个函数名作为参数