Postgres esegue alcuni semplici controlli sulla funzione che stai cercando di creare e trova (correttamente) che la tabella work_list
non esiste (ancora). Vedo due opzioni:
1. "Fai finta finché non ce la fai"
Crea effettivamente la tabella (temporanea) prima di creare la funzione. La tabella temporanea scomparirà alla fine della sessione, ma una volta creata la funzione, hai superato definitivamente questo test.
Ovviamente, dovresti eliminare quella tabella prima di eseguire la funzione nello stesso sessione per evitare un conflitto. Meglio, però:usa CREATE TEMP TABLE IF NOT EXISTS
nella tua funzione (Postgres 9.1+). Potresti voler troncare la tabella se esiste già ...
Comunque (vedi commenti sotto), citando il manuale
Enfasi in grassetto la mia.
2. Usa invece PL/pgSQL
I controlli sono meno accurati in plpgsql. Se Postgres si lamenta ancora (cosa che in questo caso non accade), puoi anche esegui SQL dinamicamente con EXECUTE
.
A parte:in molti casi, esiste una soluzione più performante senza un tavolo temporaneo dietro l'angolo ...