PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Błąd podczas ustawiania n_distinct przy użyciu zmiennej plpgsql

To jest zgodne z projektem. Instrukcja wyjaśnia w rozdziale Zastępowanie zmiennych :

Podstawianie zmiennych obecnie działa tylko w SELECT , INSERT , UPDATE i DELETE poleceń, ponieważ główny silnik SQL zezwala na parametry zapytań tylko w tych poleceniach. Aby użyć niestałej nazwy lub wartości w innych typach instrukcji (nazywanych ogólnie instrukcjami narzędziowymi), należy skonstruować instrukcję narzędzia jako ciąg i EXECUTE to.

nie możesz sparametryzować wartość w dynamicznej instrukcji za pomocą EXECUTE albo dlatego, cytując rozdział Wykonywanie poleceń dynamicznych :

Innym ograniczeniem symboli parametrów jest to, że działają tylko w SELECT , INSERT , UPDATE i DELETE polecenia. W innych typach instrukcji (ogólnie nazywanych instrukcjami narzędziowymi) musisz wstawić wartości w formie tekstowej, nawet jeśli są to tylko wartości danych.

jedyna opcja w funkcji plpgsql jest połączenie wartości z ciągiem poleceń. Możesz użyć format() , ale w prostym przykładzie zwykła konkatenacja jest bezpieczna i łatwa:

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
$$;

Kwalifikacja schematu pg_temp. sprawia, że ​​jest to (nieudokumentowana!) funkcja „tymczasowa”, odzwierciedlająca pytanie.
Podręcznik o n_distinct .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. dołącz do dwóch różnych tabel i usuń zduplikowane wpisy

  2. Jak Cosh() działa w PostgreSQL

  3. Dlaczego pg_restore zwraca pomyślnie, ale w rzeczywistości nie przywraca mojej bazy danych?

  4. W jaki sposób search_path wpływa na rozpoznawanie identyfikatora i bieżący schemat?

  5. wstawianie identyfikatorów wielu wierszy w psycopg2