Toto je záměrné. Návod vysvětluje v kapitole Proměnná substituce :
Substituce proměnných aktuálně funguje pouze v
SELECT,INSERT,UPDATEaDELETEpříkazy, protože hlavní SQL engine umožňuje parametry dotazu pouze v těchto příkazech. Chcete-li použít nekonstantní název nebo hodnotu v jiných typech příkazů (obecně nazývaných příkazy nástroje), musíte příkaz nástroje vytvořit jako řetězec aEXECUTEto.
Nemůžete parametrizujte hodnotu v dynamickém příkazu pomocí EXECUTE buď proto, cituji kapitolu Provádění dynamických příkazů :
Dalším omezením symbolů parametrů je, že fungují pouze v
SELECT,INSERT,UPDATEaDELETEpříkazy. V jiných typech příkazů (obecně nazývaných příkazy utility) musíte hodnoty vkládat textově, i když jsou to pouze datové hodnoty.
Jediná možnost ve funkci plpgsql je zřetězení hodnoty do příkazového řetězce. Můžete použít format() , ale pro jednoduchý příklad je jednoduché zřetězení bezpečné a snadné::
CREATE OR REPLACE FUNCTION pg_temp.setdistinct(_cnt real)
RETURNS void
LANGUAGE plpgsql AS
$$
BEGIN
EXECUTE 'ALTER TABLE _temp ALTER COLUMN id SET (n_distinct=' || _cnt || ')';
END
$$;
Kvalifikace schématu pg_temp. dělá z toho (nedokumentovanou!) "dočasnou" funkci, která zrcadlí otázku.
Příručka o n_distinct .