PL / PgSQL EXECUTEを使用する必要があります DOを介したステートメント ブロックまたはPL/PgSQL関数(CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql )。動的SQLは、PostgreSQLで使用される通常のSQLダイアレクトではサポートされておらず、手続き型PL/PgSQLバリアントでのみサポートされています。
DO
$$
BEGIN
EXECUTE format('CREATE TABLE %I AS SELECT * FROM backup', 'backup_' || to_char(CURRENT_DATE,'yyyy-mm-dd'));
END;
$$ LANGUAGE plpgsql;
format(...) 関数の%I および%L format-specifiersは、それぞれ適切な識別子とリテラルの引用を行います。
リテラルの場合は、EXECUTE ... USINGを使用することをお勧めします format(...)ではなく %Lを使用 、ただし、テーブル/列名などの識別子の場合、形式は%I パターンは、冗長なquote_identの簡潔な代替手段です。 呼び出します。