PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Dodaj kolumnę do tabeli we wszystkich schematach bazy danych 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$

Możesz przeglądać wpisy w tabelach katalogu systemowego za pomocą DO oświadczenie . Wymaga wersji Postgres 9.0 lub nowszej .
Możesz też utworzyć funkcję . DO oświadczenie używa języka proceduralnego plpgsql domyślnie.

Jedynym potrzebnym katalogiem systemowym jest pg_namespace , przechowujący schematy bazy danych. Przejdź przez wszystkie schematy z wyjątkiem znanych schematów systemowych.

Upewnij się, że masz połączenie z właściwą bazą danych!

Aby dodać kolumnę do tabeli z NOT NULL ograniczenia, należy również podać wartość domyślną, aby wypełnić nową kolumnę. Inaczej logicznie niemożliwe. Dodałem DEFAULT TRUE , dostosuj się do swoich potrzeb.

Unikaj wstrzykiwania SQL poprzez prawidłowe cytowanie identyfikatorów pobranych z tabel katalogu systemowego. quote_ident() w tym przypadku. [Jest więcej opcji. Zobacz:

Potrzebujesz dynamicznego SQL. Podstawową „sztuczką” jest po prostu ustawienie search_path dynamicznie, więc to samo stwierdzenie może być powtarzane w kółko. Efekt SET LOCAL trwa do końca transakcji. Możesz użyć RESET search_path lub zapisz poprzedni stan i zresetuj go, jeśli musisz zrobić z nim więcej w tej samej transakcji (mało prawdopodobne):

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyeliminuj zduplikowane miasta z bazy danych

  2. PostgreSQL initdb (Inicjalizacja bazy danych) w systemie Linux

  3. hibernacja - Postgres- listy docelowe mogą mieć maksymalnie 1664 wpisów

  4. połącz instancję postgres google cloud sql z potoku wiązki

  5. Sporadyczny błąd Postgresa w Heroku:nie można przetłumaczyć nazwy hosta <pg URL> na adres:Nieznana nazwa lub usługa (PG::Błąd)