これを行わないでください。最初に、から始めて、代替案をよく検討してください。パーティショニングと制約の除外 。
動的テーブル名を使用する必要がある場合は、クエリ生成中にアプリケーションレベルで使用してください。
他のすべてが失敗した場合は、次のようなPL/PgSQLプロシージャを使用できます。
CREATE OR REPLACE pleasedont(int year) RETURNS TABLE basetable AS $$
BEGIN
RETURN QUERY EXECUTE format('SELECT col1, col2, col3 FROM %I', 'basetable_'||year);
END;
$$ LANGUAGE plpgsql;
これは、サブテーブルと同じ構造のベーステーブルがある場合にのみ機能します。また、修飾子(句の制約など)を追加し始めるときに作業するのは非常に面倒であり、あらゆる種類のプランのキャッシュや効果的なプリペアドステートメントの使用を妨げます。