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

Cara memilih dari variabel yang merupakan nama tabel n Postgre>=9.2

Balasan yang benar adalah komentar dari Anton Kovalenko

Anda tidak dapat menggunakan variabel sebagai nama tabel atau kolom dalam SQL yang disematkan.

UPDATE dynamic_table_name SET ....

PostgreSQL menggunakan rencana yang disiapkan dan disimpan untuk SQL tertanam, dan referensi ke objek target (tabel) dalam dan dikodekan dengan keras dalam rencana - beberapa karakteristik memiliki dampak signifikan pada rencana - untuk satu tabel dapat digunakan indeks, untuk yang lain tidak. Perencanaan kueri relatif lambat, jadi PostgreSQL tidak mencobanya secara transparan (tanpa sedikit pengecualian).

Anda harus menggunakan SQL dinamis - satu tujuan digunakan untuk situasi serupa. Anda selalu membuat string SQL baru dan paket tidak disimpan

DO $$
DECLARE r record;
BEGIN
  FOR r IN SELECT table_name 
              FROM information_schema.tables
             WHERE table_catalog = 'public'
  LOOP
    EXECUTE format('UPDATE %I SET id = 10 WHERE id = 15', r.table_name);
  END LOOP;
END $$;

Perhatian:SQL Dinamis tidak aman (ada injeksi SQL risiko) tanpa sanitasi parameter. Saya menggunakan fungsi "format " untuk itu. Cara lain adalah menggunakan "quote_ident " fungsi.

EXECUTE 'UPDATE ' || quote_ident(r.table_name) || 'SET ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. String format postgres menggunakan array

  2. Postgresql tidak membuat db dengan "createdb" sebagai pengguna super, namun tidak menghasilkan kesalahan

  3. Paket 'pgadmin4' tidak memiliki kandidat instalasi, untuk Ubuntu 20.04

  4. kesalahan segmentasi pg.rb [Mojave upgrade]

  5. Membuat kueri yang mengembalikan id jika kondisinya cocok dalam baris dari dua tabel