Перейти к основному содержимому

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

Смотрите также

CREATE FOREIGN TABLE, DROP ALTER FOREIGN TABLE