PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Грешка при настройка на n_distinct с помощта на променлива plpgsql

Това е по проект. Ръководството обяснява в главата Заместване на променлива :

Заместването на променлива понастоящем работи само в 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 .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как Atanh() работи в PostgreSQL

  2. PostgreSQL индекс на JSON

  3. Spring Data JPA + Hibernate Пропускане на заключени редове (PostgreSQL)

  4. Failover &Failback за PostgreSQL на Microsoft Azure

  5. Какво точно обяснява PostgreSQL?