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

Přidejte sloupec do tabulky ve všech schématech databáze PostgreSQL

DO
$do$
DECLARE
  _schema text;
  _sp
BEGIN
   FOR _schema IN
      SELECT quote_ident(nspname)  -- prevent SQL injection
      FROM   pg_namespace n
      WHERE  nspname !~~ 'pg_%'
      AND    nspname <>  'information_schema'
   LOOP
      EXECUTE 'SET LOCAL search_path = ' || _schema;
      ALTER TABLE product ADD COLUMN show_price boolean NOT NULL DEFAULT TRUE;
   END LOOP;
END
$do$

Položky v tabulkách systémového katalogu můžete procházet pomocí DO prohlášení . Vyžaduje Postgres 9.0 nebo novější .
Můžete také vytvořit funkci . DO prohlášení používá procedurální jazyk plpgsql ve výchozím nastavení.

Jediný systémový katalog, který potřebujete, je pg_namespace , obsahující schémata databáze. Procházet všechna schémata kromě známých systémových schémat.

Ujistěte se, že jste připojeni ke správné databázi!

Chcete-li přidat sloupec do tabulky s NOT NULL omezení, musíte také zadat výchozí hodnotu pro vyplnění nového sloupce. Jinak logicky nemožné. Přidal jsem DEFAULT TRUE , upravte podle svých potřeb.

Vyhněte se vkládání SQL správným citováním identifikátorů získaných z tabulek systémového katalogu. quote_ident() v tomto případě. [Možností je více. Viz:

Potřebujete dynamické SQL. Primárním „trikem“ je pouze nastavit search_path dynamicky, takže stejný příkaz lze spustit znovu a znovu. Účinek SET LOCAL trvá do konce transakce. Můžete použít RESET search_path nebo uložte předchozí stav a resetujte jej, pokud s ním potřebujete udělat více ve stejné transakci (nepravděpodobné):

SHOW search_path INTO _text_var;
...
EXECUTE 'SET search_path = ' || _text_var;


  1. Změna tabulky se nezdaří, protože řádek obsahuje nesprávná data – nesprávná hodnota data a času:'0000-00-00 00:00:00'

  2. Nejlepší způsob, jak uložit obrázky, které pocházejí ze serveru v Androidu

  3. Pro Matlab a MySQL nebyl nalezen žádný vhodný ovladač

  4. Řízení stromového zobrazení Zaškrtněte Přidat Odstranit uzly