sql >> Databasteknik >  >> RDS >> PostgreSQL

Kan inte släppa temptabellen i Postgres-funktionen:används av aktiva frågor i den här sessionen

Felmeddelandet är ganska uppenbart, du kan inte släppa en tillfällig tabell medan den används.

Du kanske kan undvika problemet genom att lägga till ON COMMIT DROP :

Detta kan dock förmodligen vara enklare. Om du inte behöver alla dessa temporära tabeller till att börja med (vilket jag misstänker), du kan ersätta dem alla med CTEs (eller de flesta av dem förmodligen till och med med billigare subqueries) och förenkla till en stor fråga. Kan vara plpgsql eller bara SQL:

CREATE FUNCTION everything(waypoints)
  RETURNS TABLE(node int, xy text[]) AS
$func$
   WITH bbox      AS (SELECT ... FROM waypoints)  -- not the fct. parameter!
    , b_spaces    AS (SELECT ... )
    , b_graph     AS (SELECT ... )
    , local_green AS (SELECT ... )
    , aug_temp    AS (SELECT ... )
    , b_graph2(source, target, cost) AS (
        SELECT ... FROM b_graph
        UNION ALL  -- guessing you really want UNION ALL
        SELECT ... FROM aug_temp
        UNION ALL 
        SELECT ... FROM aug_temp
       )
    , results     AS (SELECT id1, ... FROM b_graph2)
    , pkg         AS (SELECT loc, ... )
   SELECT id1, array_agg(loc) 
   FROM   pkg
   GROUP  BY id1
$func$ LANGUAGE sql;

Visningar lagrar bara en fråga ("receptet"), inte de faktiska resulterande värdena ("soppan").

Det är vanligtvis billigare att använda CTE istället för att skapa tillfälliga tabeller.
Härledda tabeller i frågor , sorterade efter deras typiska övergripande prestanda (undantag för speciella fall som involverar index). Från långsam till snabb:

CREATE TABLE
CREATE UNLOGGED TABLE
CREATE TEMP TABLE
CTE
subquery

UNION skulle försöka vika dubbletter av rader. Vanligtvis vill folk verkligen ha UNION ALL , som bara lägger till rader. Snabbare och försöker inte ta bort duper.




  1. byta från MySQL till PostgreSQL för Ruby on Rails för Herokus skull

  2. Kör Django-migreringar på dockat projekt

  3. Lär dig att lagra och analysera dokument på Windows filsystem med SQL Server Semantic Search – Del 1

  4. Laravel-pivottabell med flera kolumner som måste infogas senare