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

Jak vybrat z proměnné, která je názvem tabulky n Postgre>=9.2

Správná odpověď je komentář od Antona Kovalenka

Proměnnou nelze použít jako název tabulky nebo sloupce ve vloženém SQL.

UPDATE dynamic_table_name SET ....

PostgreSQL používá připravené a uložené plány pro embedded SQL a odkazy na cílové objekty (tabulky) jsou v plánech hluboce a pevně zakódovány - některé vlastnosti mají významný vliv na plány - pro jednu tabulku lze použít index, pro jinou ne. Plánování dotazů je relativně pomalé, takže to PostgreSQL nezkouší transparentně (až na výjimky).

Měli byste použít dynamický SQL - jeden účel je použití pro podobné situace. Vždy vygenerujete nový řetězec SQL a plány se neuloží

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

Upozornění:Dynamický SQL je nebezpečný (existuje vložení SQL rizika) bez sanitace parametrů. Použil jsem funkci "formát Jiný způsob je použití "quote_ident ".

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



  1. Jak se vyhnout hodnotám 0 pomocí funkce MIN a MAX v SQL?

  2. VYBERTE id MAJÍCÍ maximální počet id

  3. Proč uzavíráme výsledek v Mysqli

  4. Automaticky odstranit vrácené e-mailové adresy z databáze?