PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kesalahan saat mengatur n_distinct menggunakan variabel plpgsql

Ini adalah dengan desain. Manual menjelaskan dalam bab Pergantian Variabel :

Substitusi variabel saat ini hanya berfungsi di SELECT , INSERT , UPDATE , dan DELETE perintah, karena mesin SQL utama mengizinkan parameter kueri hanya dalam perintah ini. Untuk menggunakan nama atau nilai non-konstan dalam jenis pernyataan lain (umumnya disebut pernyataan utilitas), Anda harus membuat pernyataan utilitas sebagai string dan EXECUTE itu.

Anda tidak bisa membuat parameter nilai dalam pernyataan dinamis dengan EXECUTE baik karena, mengutip bab Melaksanakan Perintah Dinamis :

Pembatasan lain pada simbol parameter adalah mereka hanya berfungsi diSELECT , INSERT , UPDATE , dan DELETE perintah. Dalam jenis pernyataan lain (umumnya disebut pernyataan utilitas), Anda harus memasukkan nilai secara tekstual meskipun itu hanya nilai data.

satu-satunya opsi dalam fungsi plpgsql adalah untuk menggabungkan nilai ke dalam string perintah. Anda dapat menggunakan format() , tetapi untuk contoh sederhana, penggabungan biasa aman dan mudah::

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

Kualifikasi skema pg_temp. menjadikannya sebagai fungsi "sementara" (tidak berdokumen!), mencerminkan pertanyaan.
Manual tentang 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. python pip instal kesalahan instal psycopg2

  2. Panduan Pakar untuk Replikasi Slony untuk PostgreSQL

  3. Solusi Ruby generik untuk SQLite3 LIKE atau PostgreSQL ILIKE?

  4. Bagaimana saya bisa menggunakan kueri dengan placeholder di dalam tanda kutip? (perl/postgresql)

  5. PostgreSQL - nilai dinamis sebagai nama tabel