EXECUTE ... USING działa tylko w PL/PgSQL - tj. w ramach funkcji lub DO bloki napisane w języku PL/PgSQL. Nie działa w zwykłym SQL; EXECUTE w zwykłym SQL jest zupełnie inny, do wykonywania przygotowanych instrukcji. Nie możesz używać dynamicznego SQL bezpośrednio w dialekcie SQL PostgreSQL.
Porównaj:
- Plik PL/PgSQL
EXECUTE ... USING; do EXECUTESQL
Zobacz drugi ostatni paragraf w mojej poprzedniej odpowiedzi.
Oprócz tego, że nie działa, z wyjątkiem PL/PgSQL, twoja instrukcja SQL jest błędna, nie zrobi tego, czego oczekujesz. If (select id from ids where condition = some_condition) zwraca powiedz 42 , instrukcja nie powiedzie się, jeśli id jest liczbą całkowitą. Jeśli zostanie przesłany na tekst, otrzymasz:
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 jest nieprawidłowe. Właściwie chcesz result_42_table lub "result_42_table" . Trzeba by napisać coś więcej w stylu:
EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))
... jeśli musisz użyć quote_ident .