sql >> データベース >  >> RDS >> PostgreSQL

postgresは関数内の一時テーブルを認識しません

    Postgresは、作成しようとしている関数に対していくつかの簡単なチェックを実行し、テーブルwork_listを(正しく)検出します。 (まだ)存在しません。 2つのオプションがあります:

    <ストライキ>

    1。 「あなたがそれを作るまでそれを偽造する」

    関数を作成する前に、実際に(一時的な)テーブルを作成してください。一時テーブルはセッションの終了時に削除されますが、関数が作成されると、このテストに完全に合格します。
    明らかに、同じ関数を実行する前に、そのテーブルを削除する必要があります。競合を回避するためのセッション。ただし、より良い方法: CREATE TEMP TABLE IF NOT EXISTS 関数内(Postgres 9.1以降)。テーブルがすでに存在する場合は、テーブルを切り捨てることができます...

    ただし(以下のコメントを参照)、マニュアルを引用します

    大胆な強調鉱山。

    2。代わりにPL/pgSQLを使用してください

    plpgsqlではチェックがあまり徹底されていません。それでもPostgresが文句を言う場合(この場合はそうではありません)、 EXECUTEを使用してSQLを動的に実行します

    余談ですが、多くの場合、すぐ近くに一時テーブルがない、よりパフォーマンスの高いソリューションがあります...



    1. SQLServerでデータベースを作成する方法

    2. あいまいな列名エラー

    3. PHPでExcelからデータをインポートする

    4. PostgreSQL高可用性インストールPatroni