Как установить для всех столбцов таблицы значение NOT NULL одновременно? - PullRequest
0 голосов
/ 27 сентября 2019

Возможно ли это вообще, если да, то как?если нет, то я был бы счастлив, если бы не требовалось вводить имя каждого столбца по одному.Мой сценарий использования состоит в том, что я создаю таблицу из запроса и хотел бы сделать все столбцы NOT NULL, потому что позже я делаю ORM, используя Slick, и гораздо приятнее иметь все эти типы столбцов не равными NULL (и, следовательно, не Option [X]]).Это статические данные, поэтому значения столбцов не будут равны NULL и не будут меняться.

В отличие от MySQL, Postgres не выясняет, что все исходные столбцы запроса уже НЕ равны NULL.

Я бы хотел, чтобы в моем скрипте не добавлялось ограничение одно за другим, и я был бы склонен нарушать решение при изменении схемы запроса, например

CREATE TABLE dentistry_procedure AS SELECT * FROM ...
ALTER TABLE dentistry_procedure ALTER column * SET NOT NULL;

Как?

1 Ответ

2 голосов
/ 27 сентября 2019

Вы можете использовать таблицу метаданных и построить динамический запрос:

SELECT format('ALTER TABLE %I '||STRING_AGG(format('ALTER COLUMN %I SET NOT NULL', COLUMN_NAME),CHR(13)||',')
              , MIN(TABLE_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE IS_NULLABLE = 'YES'
  AND TABLE_NAME = 't';

db <> Fiddle demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...