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
の簡潔な代替手段です。 呼び出します。