sql >> Databáze >  >> RDS >> PostgreSQL

Chyba při nastavování n_distinct pomocí proměnné plpgsql

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 , UPDATE a DELETE pří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 a EXECUTE to.

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 vSELECT , INSERT , UPDATE a DELETE pří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 .




  1. Vytvořte tabulku pomocí datového razítka

  2. Obnovte databázi mysql ze souborů .frm

  3. Generování sekvence v pořadí

  4. Ukončení podpory Salesforce TLS 1.0