Postgresは、作成しようとしている関数に対していくつかの簡単なチェックを実行し、テーブルwork_list
を(正しく)検出します。 (まだ)存在しません。 2つのオプションがあります:
<ストライキ>
1。 「あなたがそれを作るまでそれを偽造する」
関数を作成する前に、実際に(一時的な)テーブルを作成してください。一時テーブルはセッションの終了時に削除されますが、関数が作成されると、このテストに完全に合格します。明らかに、同じ関数を実行する前に、そのテーブルを削除する必要があります。競合を回避するためのセッション。ただし、より良い方法:
CREATE TEMP TABLE IF NOT EXISTS
関数内(Postgres 9.1以降)。テーブルがすでに存在する場合は、テーブルを切り捨てることができます... ただし(以下のコメントを参照)、マニュアルを引用します
大胆な強調鉱山。
2。代わりにPL/pgSQLを使用してください
plpgsqlではチェックがあまり徹底されていません。それでもPostgresが文句を言う場合(この場合はそうではありません)、 EXECUTE
を使用してSQLを動的に実行します
。
余談ですが、多くの場合、すぐ近くに一時テーブルがない、よりパフォーマンスの高いソリューションがあります...