Това е по проект. Ръководството обяснява в главата Заместване на променлива :
Заместването на променлива понастоящем работи само в
SELECT
,INSERT
,UPDATE
иDELETE
команди, тъй като основната SQL машина позволява параметри на заявка само в тези команди. За да използвате непостоянно име или стойност в други типове изрази (общо наречени изрази за помощ), трябва да конструирате оператора на помощната програма като низ иEXECUTE
го.
Вие не можете параметризира стойността в динамичен израз с EXECUTE
или защото, цитирайки главата Изпълнение на динамични команди :
Друго ограничение за символите на параметрите е, че те работят само в
SELECT
,INSERT
,UPDATE
иDELETE
команди. В други типове изрази (наричани общо взето помощни оператори) трябва да вмъквате стойности текстово, дори ако те са само стойности на данни.
Единствената опция във функцията plpgsql е конкатенирането на стойността в командния низ. Може да използвате format()
, но за простия пример обикновената конкатенация е безопасна и лесна::
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
$$;
Квалификацията на схемата pg_temp.
го прави (недокументирана!) "временна" функция, отразяваща въпроса.
Ръководството за n_distinct
.