PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Добавяне на колона към таблица във всички схеми на 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$

Можете да преминете през записите в таблиците на системния каталог с DO изявление . Изисква Postgres 9.0 или по-нова версия .
Можете също да създадете функция . DO изразът използва процедурния език plpgsql по подразбиране.

Единственият системен каталог, от който се нуждаете, е pg_namespace , съдържащ схемите на база данни. Преминете през всички схеми с изключение на известните системни схеми.

Уверете се, че сте свързани с правилната база данни!

За да добавите колона към таблица с NOT NULL ограничение, трябва също да предоставите стойност по подразбиране, за да попълните новата колона. Логически невъзможно друго. Добавих DEFAULT TRUE , коригирайте според вашите нужди.

Избягвайте SQL инжектиране, като цитирате правилно идентификатори, извлечени от системни каталожни таблици. quote_ident() в такъв случай. [Има още опции. Вижте:

Имате нужда от динамичен SQL. Основният „трик“ е просто да зададете search_path динамично, така че един и същ оператор може да се изпълнява отново и отново. Ефектът от SET LOCAL продължава до края на сделката. Можете да използвате RESET search_path или запазете предишното състояние и го нулирайте, ако трябва да направите повече в същата транзакция с него (малко вероятно):

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. Дълбоко гмуркане на доставчик на облак:PostgreSQL на Microsoft Azure

  2. Как to_date() работи в PostgreSQL

  3. Защо елементът на последователността на Postgres се повишава дори ако създаването на обект е неуспешно?

  4. множество selectInput стойности създават неочаквано dplyr (postgres) поведение

  5. Създайте база данни, като използвате съхранена функция