Postgres изпълнява някои прости проверки на функцията, която се опитвате да създадете, и открива (правилно), че таблицата work_list
(все още) не съществува. Виждам две опции:
<удар>
1. „Фалшифицирайте, докато не успеете“
Всъщност създайте (временната) таблица, преди да създадете функцията. Временната таблица ще изчезне в края на сесията, но след като функцията бъде създадена, вие сте преминали този тест завинаги.Очевидно е, че трябва да премахнете тази таблица, преди да изпълните функцията в същата сесия, за да избегнете конфликт. По-добре обаче:използвайте
CREATE TEMP TABLE IF NOT EXISTSкод>
във вашата функция (Postgres 9.1+). Може да искате да съкратите таблицата, ако вече съществува ... Въпреки това (вижте коментарите по-долу), цитирайки ръководството
Удебелен акцент е мой.
2. Вместо това използвайте PL/pgSQL
Проверките са по-малко задълбочени в plpgsql. Ако Postgres все още се оплаква (което не е в този случай), можете също да изпълнете SQL динамично с EXECUTE
.
Настрана:В много случаи зад ъгъла има по-ефективно решение без временна таблица...