EXECUTE ... USING funguje pouze v PL/PgSQL - tedy v rámci funkcí nebo DO bloky napsané v jazyce PL/PgSQL. Nefunguje v prostém SQL; EXECUTE v prostém SQL je to úplně jiné, pro provádění připravených příkazů. Dynamické SQL nemůžete používat přímo v dialektu SQL PostgreSQL.
Porovnejte:
EXECUTE ... USINGPL/PgSQL; doEXECUTESQL
Viz 2. poslední par v mé předchozí odpovědi.
Kromě toho, že neběží kromě PL/PgSQL, váš SQL příkaz je špatný, nebude dělat to, co očekáváte. If (select id from ids where condition = some_condition) vrátí hodnotu 42 , příkaz by selhal, pokud by id je celé číslo. Pokud se přenese do textu, dostanete:
EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
EXECUTE format('SELECT * from result_%s_table', '"42"');
EXECUTE 'SELECT * from result_"42"_table';
To je neplatné. Ve skutečnosti chcete result_42_table nebo "result_42_table" . Musel bys napsat něco víc jako:
EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))
... pokud musíte použít quote_ident .