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, который не допускает существование сторонних таблиц с нулем столбцов.