ALTER FOREIGN TABLE
Эта страница переведена при помощи нейросети GigaChat.
ALTER FOREIGN TABLE — изменение определения внешней таблицы.
Синтаксис
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
action [, ... ]
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
RENAME [ COLUMN ] column_name TO new_column_name
ALTER FOREIGN TABLE [ IF EXISTS ] name
RENAME TO new_name
ALTER FOREIGN TABLE [ IF EXISTS ] name
SET SCHEMA new_schema
where action is one of:
ADD [ COLUMN ] column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]
ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ]
ALTER [ COLUMN ] column_name SET DEFAULT expression
ALTER [ COLUMN ] column_name DROP DEFAULT
ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL
ALTER [ COLUMN ] column_name SET STATISTICS integer
ALTER [ COLUMN ] column_name SET ( attribute_option = value [, ... ] )
ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] )
ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }
ALTER [ COLUMN ] column_name OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])
ADD table_constraint [ NOT VALID ]
VALIDATE CONSTRAINT constraint_name
DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]
DISABLE TRIGGER [ trigger_name | ALL | USER ]
ENABLE TRIGGER [ trigger_name | ALL | USER ]
ENABLE REPLICA TRIGGER trigger_name
ENABLE ALWAYS TRIGGER trigger_name
SET WITHOUT OIDS
INHERIT parent_table
NO INHERIT parent_table
OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])
Описание
ALTER FOREIGN TABLE используется для изменения структуры уже существующей внешней таблицы. Команда поддерживает несколько форм:
ADD COLUMN- Добавляет новый столбец во внешнюю таблицу, используя тот же синтаксис, что и CREATE FOREIGN TABLE. В отличие от обычных таблиц, это действие не затрагивает базовое хранилище — оно лишь объявляет новый столбец, доступный через внешнюю таблицу.
DROP COLUMN [ IF EXISTS ]- Удаляет столбец из внешней таблицы. Укажите
CASCADE, если есть зависимые объекты (например представления). Если указанIF EXISTS, отсутствие столбца не вызывает ошибку, а лишь выдает уведомление.
SET DATA TYPE- Меняет тип данных столбца внешней таблицы. Это изменение также не затрагивает базовое хранилище, а лишь корректирует представление PostgreSQL о типе данных этого столбца.
SET/DROP DEFAULT- Устанавливает или удаляет значение по умолчанию для столбца. Значения по умолчанию применяются только к последующим командам
INSERTилиUPDATE, они не вызывают изменения строк, уже находящихся в таблице.
SET/DROP NOT NULL- Управляет тем, допускает ли столбец значения
NULL.
SET STATISTICS- Задает ориентир сбора статистики по столбцам для последующих операций ANALYZE. Смотрите аналогичную форму команды ALTER TABLE для получения более подробной информации.
SET (attribute_option = value [, ... ])RESET (attribute_option [, ... ])- Устанавливает или сбрасывает параметры атрибута столбца. Смотрите аналогичную форму команды ALTER TABLE для получения более подробной информации.
SET STORAGE- Задает способ хранения данных в столбце, если оболочка это поддерживает. Иначе не оказывает эффекта. Смотрите аналогичную форму команды ALTER TABLE для получения более подробной информации.
ADD table_constraint [ NOT VALID ]- Добавляет ограничение к внешней таблице, используя тот же синтаксис, что и CREATE FOREIGN TABLE. В настоящее время поддерживаются только ограничения
CHECK.В отличие от обычных таблиц, при добавлении ограничения к внешней таблице его соблюдение не проверяется — PostgreSQL просто считает, что все строки этой таблицы должны удовлетворять заданному условию. (Подробнее смотрите в описании CREATE FOREIGN TABLE). Если ограничение указано с параметром
NOT VALID, оно не считается действующим, а лишь сохраняется для возможного последующего использования.
VALIDATE CONSTRAINT- Помечает ранее добавленное ограничение, помеченное как
NOT VALID, действительным. При этом фактическая проверка данных не выполняется, но все последующие запросы будут исходить из предположения, что условие выполняется.
DROP CONSTRAINT [ IF EXISTS ]- Удаляет указанное ограничение из внешней таблицы. Если задан параметр
IF EXISTS, и такого ограничения не существует, ошибка не возникает — вместо этого выдается уведомление.
DISABLE/ENABLE [ REPLICA | ALWAYS ] TRIGGER- Управляют состоянием триггеров внешней таблицы, включая или отключая их. Подробнее Смотрите аналогичную форму команды ALTER TABLE для получения более подробной информации.
SET WITHOUT OIDS- Устаревшая форма, предназначенная для удаления системного столбца
oid. Однако, поскольку такие столбцы больше не поддерживаются, команда не оказывает никакого эффекта.
INHERIT parent_table- Добавляет целевую внешнюю таблицу в качестве нового дочернего элемента указанной родительской таблицы. Смотрите аналогичную форму команды ALTER TABLE для получения более подробной информации.
NO INHERIT parent_table- Удаляет целевую внешнюю таблицу из списка дочерних элементов указанной родительской таблицы.
OWNER- Изменяет владельца внешней таблицы на указанного пользователя.
OPTIONS ( [ ADD | SET | DROP ] option [value] [, ... ] )- Позволяет изменить параметры внешней таблицы или отдельных ее столбцов:
ADD— добавляет новый параметр (используется по умолчанию, если действие не указано);SET— изменяет значение существующей;DROP— удаляет указанный параметр.
Дублирование имен параметров не допускается (хотя это нормально для параметра таблицы и параметра столбца иметь одно и то же имя). Имена параметров и их значения также проверяются с использованием библиотеки внешней оболочки данных.
RENAME- Переименовывает внешнюю таблицу или один из ее столбцов.
SET SCHEMA- Перемещает внешнюю таблицу в другую схему.
Все вышеуказанные действия, кроме
RENAMEиSET SCHEMA, можно объединить в одну команду для выполнения нескольких изменений одновременно — например, добавление нескольких столбцов и изменение типов сразу нескольких из них.Если используется форма
ALTER FOREIGN TABLE IF EXISTS ...и таблица отсутствует, команда не вызывает ошибку, а только выводит уведомление.
Чтобы выполнить эту команду, необходимо быть владельцем таблицы. Чтобы перенести таблицу в другую схему, нужно иметь право CREATE в целевой схеме.
Чтобы сменить владельца, необходимо иметь право SET ROLE для новой роли-владельца, а эта роль должна иметь право CREATE в схеме таблицы. Эти требования обеспечивают, что смена владельца не предоставляет дополнительных возможностей, которых нельзя было бы достичь удалением и повторным созданием таблицы. Исключение составляют суперпользователи, которые могут изменять владельца любой таблицы без ограничений.
Добавление или изменение столбца требует права USAGE на используемый тип данных.
Параметры
name- Задает имя существующей внешней таблицы, при необходимости дополненное схемой, которая должна быть изменена. Если указан
ONLY, изменения применяются только к указанной таблице, без затрагивания дочерних. БезONLYизменения затрагивают как таблицу, так и ее потомков. Используйте*после имени таблицы для явного указания на включение дочерних таблиц.
column_name- Задает имя нового или существующего столбца.
new_column_name- Задает новое имя для существующего столбца.
new_name- Задает новое имя для таблицы.
data_type- Задает тип данных нового столбца или новый тип данных для существующего столбца.
table_constraint- Задает новое ограничение уровня таблицы для внешней таблицы.
constraint_name- Задает имя существующего ограничения, которое нужно удалить.
CASCADE- Автоматически удаляет все объекты, зависящие от столбца или ограничения (например, представления), а также объекты, зависящие от них.
RESTRICT- Запрещает удаление столбца или ограничения, если от них зависят другие объекты. Является поведением по умолчанию.
trigger_name- Задает имя конкретного триггера, который нужно включить или отключить.
ALL- Включает или отключает все триггеры внешней таблицы. Требует прав суперпользователя, если среди них есть внутренне сгенерированные триггеры. Основная система не добавляет такие триггеры к внешним таблицам, но дополнительный код может это сделать.
USER- Отключает или включает все пользовательские триггеры внешней таблицы, не затрагивая внутренне сгенерированные триггеры.
parent_table- Указывает имя родительской таблицы, с которой устанавливается или разрывается наследование.
new_owner- Указывает имя нового владельца внешней таблицы.
new_schema- Указывает имя схемы, в которую будет перемещена внешняя таблица.
Примечания
Ключевое слово COLUMN — это шум и может быть опущено.
Согласованность с внешним сервером не проверяется при добавлении или удалении столбца с помощью ADD COLUMN или DROP COLUMN, добавляется ограничение NOT NULL или CHECK, или тип столбца изменяется с помощью SET DATA TYPE. Пользователь должен сам убедиться в согласованности.
Смотрите CREATE FOREIGN TABLE для более подробного описания допустимых параметров.
Примеры
Ограничение NOT NULL для столбца:
ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;
Изменение параметров внешней таблицы:
ALTER FOREIGN TABLE myschema.distributors OPTIONS (ADD opt1 'value', SET opt2 'value2', DROP opt3);
Совместимость
Формы ADD, DROP, SET DATA TYPE соответствуют стандарту SQL. Остальные — расширения PostgreSQL. Кроме того, возможность указать более одной манипуляции в одной команде ALTER FOREIGN TABLE является расширением.
Возможность оставить внешнюю таблицу без столбцов также является расширением.
Формы ADD, DROP, и SET DATA TYPE соответствуют стандарту SQL. Другие формы являются расширениями стандарта SQL для PostgreSQL. Кроме того, возможность указать более одной манипуляции в одной команде ALTER FOREIGN TABLE является расширением.
ALTER FOREIGN TABLE DROP COLUMN позволяет удалить единственный столбец сторонней таблицы и оставить таблицу без столбцов. Это является расширением стандарта SQL, который не допускает существование сторонних таблиц с нулем столбцов.