sql >> Databáze >  >> RDS >> PostgreSQL

postgres nerozpozná dočasnou tabulku ve funkci

Postgres spustí několik jednoduchých kontrol funkce, kterou se pokoušíte vytvořit, a zjistí (správně), že tabulka work_list (zatím) neexistuje. Vidím dvě možnosti:

1. „Faleš to, dokud to neuděláš“

Ve skutečnosti vytvořte (dočasnou) tabulku před vytvořením funkce. Dočasná tabulka bude na konci relace pryč, ale jakmile je funkce vytvořena, prošli jste tímto testem nadobro.
Je zřejmé, že před spuštěním funkce v té samé budete muset tuto tabulku zrušit. sezení, aby nedošlo ke konfliktu. Lepší však:použijte CREATE TEMP TABLE IF NOT EXISTS ve vaší funkci (Postgres 9.1+). Možná budete chtít tabulku zkrátit, pokud již existuje ...

Nicméně (viz komentáře níže), cituji manuál

Tučné zdůraznění moje.

2. Místo toho použijte PL/pgSQL

Kontroly jsou v plpgsql méně důkladné. Pokud si Postgres stále stěžuje (což v tomto případě není), můžete také spouštět SQL dynamicky pomocí EXECUTE .

Stranou:V mnoha případech existuje výkonnější řešení bez tabulky temp za rohem ...



  1. Výběr MIN i MAX z tabulky je pomalejší, než se očekávalo

  2. Jak porovnávat pole v PostgreSQL

  3. Oracle pl-sql escape znak (pro ' )

  4. Jak funguje přepínač alter tabulky na serveru SQL?