ALTER FOREIGN TABLE

ALTER FOREIGN TABLE — изменить определение сторонней таблицы


Синтаксис

ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] имя [ * ]
    действие [, ... ]
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] имя [ * ]
    RENAME [ COLUMN ] имя_столбца TO новое_имя_столбца
ALTER FOREIGN TABLE [ IF EXISTS ] имя
    RENAME TO новое_имя
ALTER FOREIGN TABLE [ IF EXISTS ] имя
    SET SCHEMA новая_схема

где действием может быть:

    ADD [ COLUMN ] имя_столбца тип_данных [ COLLATE правило_сортировки ] [ ограничение_столбца [ ... ] ]
    DROP [ COLUMN ] [ IF EXISTS ] имя_столбца [ RESTRICT | CASCADE ]
    ALTER [ COLUMN ] имя_столбца [ SET DATA ] TYPE тип_данных [ COLLATE правило_сортировки ]
    ALTER [ COLUMN ] имя_столбца SET DEFAULT выражение
    ALTER [ COLUMN ] имя_столбца DROP DEFAULT
    ALTER [ COLUMN ] имя_столбца { SET | DROP } NOT NULL
    ALTER [ COLUMN ] имя_столбца SET STATISTICS целое_число
    ALTER [ COLUMN ] имя_столбца SET ( атрибут = значение [, ... ] )
    ALTER [ COLUMN ] имя_столбца RESET ( атрибут [, ... ] )
    ALTER [ COLUMN ] имя_столбца SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }
    ALTER [ COLUMN ] имя_столбца OPTIONS ( [ ADD | SET | DROP ] параметр ['значение'] [, ... ])
    ADD ограничение_таблицы [ NOT VALID ]
    VALIDATE CONSTRAINT имя_ограничения
    DROP CONSTRAINT [ IF EXISTS ]  имя_ограничения [ RESTRICT | CASCADE ]
    DISABLE TRIGGER [ имя_триггера | ALL | USER ]
    ENABLE TRIGGER [ имя_триггера | ALL | USER ]
    ENABLE REPLICA TRIGGER имя_триггера
    ENABLE ALWAYS TRIGGER имя_триггера
    SET WITHOUT OIDS
    INHERIT таблица_родитель
    NO INHERIT таблица_родитель
    OWNER TO { новый_владелец | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
    OPTIONS ( [ ADD | SET | DROP ] параметр ['значение'] [, ... ])

Описание

Команда ALTER FOREIGN TABLE изменяет определение существующей сторонней таблицы. Она имеет несколько форм:

ADD COLUMN

Эта форма добавляет новый столбец в стороннюю таблицу, используя тот же синтаксис, что и CREATE FOREIGN TABLE. В отличие от случая, когда столбец добавляется в обычную таблицу, при данной операции в базовом хранилище ничего не происходит: это действие просто объявляет, что некоторый новый столбец теперь доступен через стороннюю таблицу.

DROP COLUMN [ IF EXISTS ]

Эта форма удаляет столбец из сторонней таблицы. Если от этого столбца зависит что-то вне таблицы (например представления), нужно будет написать CASCADE. Если указано IF EXISTS и столбец не существует, это не считается ошибкой. В этом случае просто выводится уведомление.

SET DATA TYPE

Эта форма изменяет тип столбца сторонней таблицы. Опять же, это не оказывает никакого влияния на базовое хранилище: это действие просто изменяет тип, который, по мнению QHB, имеет этот столбец.

SET/DROP DEFAULT

Эти формы устанавливают или удаляют значение по умолчанию для столбца. Значения по умолчанию применяются только в последующих командах INSERT или UPDATE; они не вызывают изменения уже существующих строк в таблице.

SET/DROP NOT NULL

Помечает столбец как принимающий или не принимающий значения NULL.

SET STATISTICS

Эта форма задает цель сбора статистики для каждого столбца для последующих операций ANALYZE. Дополнительную информацию см. в описании аналогичной формы команды ALTER TABLE.

SET ( атрибут = значение [, ... ] )
RESET ( атрибут [, ... ] )

Эта форма устанавливает или сбрасывает значения для атрибута. Дополнительную информацию см. в описании аналогичной формы команды ALTER TABLE.

SET STORAGE

Эта форма устанавливает режим хранения для столбца. Дополнительную информацию см. в описании аналогичной формы команды ALTER TABLE. Обратите внимание, что режим хранения ни на что не влияет, если обертка сторонних данных таблицы его игнорирует.

ADD ограничение_таблицы [ NOT VALID ]

Эта форма добавляет новое ограничение в стороннюю таблицу, используя тот же синтаксис, что и CREATE FOREIGN TABLE. В настоящее время поддерживаются только ограничения CHECK.
В отличие от случая, когда ограничение добавляется в обычную таблицу, ограничение сторонней таблицы никак не проверяется; скорее, это действие просто объявляет, что для всех строк в сторонней таблице должно выполняться некоторое новое условие. (См. описание на справочной странице команды 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. Так как добавить системные столбцы oid теперь невозможно, это указание не действует.

INHERIT таблица_родитель

Эта форма добавляет целевую стороннюю таблицу в качестве нового потомка указанной родительской таблицы. Дополнительную информацию см. в описании аналогичной формы команды ALTER TABLE.

NO INHERIT таблица_родитель

Эта форма удаляет целевую стороннюю таблицу из списка потомков указанной родительской таблицы.

OWNER

Эта форма меняет владельца сторонней таблицы на указанного пользователя.

OPTIONS ( [ ADD | SET | DROP ] параметр ['значение'] [, ... ] )

Изменяет параметры для сторонней таблицы или одного из ее столбцов. ADD, SET и DROP указывают на действие, которое необходимо выполнить (добавление, установка и удаление соответственно). Если явно не указана никакая операция, по умолчанию подразумевается ADD. Повторяющиеся имена параметров не допускаются (хотя иметь одно и то же имя для параметра таблицы и параметра столбца нормально). Имена и значения параметров также проверяются с помощью библиотеки обертки сторонних данных.

RENAME

Формы RENAME изменяют имя сторонней таблицы или имя какого-либо ее столбца.

SET SCHEMA

Эта форма перемещает стороннюю таблицу в другую схему.

Все действия, кроме RENAME и SET SCHEMA, могут быть объединены в один список и выполнены одновременно. Например, в одной команде можно добавить несколько столбцов и/или изменить тип нескольких столбцов.

Если команда написана в виде ALTER FOREIGN TABLE IF EXISTS ... и сторонняя таблица не существует, это не считается ошибкой. В этом случае просто выводится уведомление.

Чтобы использовать команду ALTER FOREIGN TABLE, нужно быть владельцем соответствующей сторонней таблицы. Чтобы изменить схему сторонней таблицы, необходимо помимо этого иметь право CREATE в новой схеме. Для смены владельца иметь возможность выполнять SET ROLE для новой роли-владельца, и эта роль должна иметь право CREATE в схеме сторонней таблицы. (Эти ограничения направлены на то, чтобы при смене владельца не происходило ничего, что нельзя было бы сделать путем удаления и повторного создания сторонней таблицы. Однако суперпользователь все равно может сменить владельца любой сторонней таблицы.) Чтобы добавить столбец или изменить тип столбца, помимо этого необходимо иметь право USAGE для его типа данных.


Параметры

имя

Имя изменяемой существующей сторонней таблицы (может быть дополнено схемой). Если перед именем таблицы указывается ONLY, изменяется только эта таблица. Если ONLY не указано, будут изменены таблица и все ее потомки (если таковые имеются). После имени таблицы можно также добавить необязательное указание *, чтобы явно обозначить, что изменению подлежат все дочерние таблицы.

имя_столбца

Имя нового или существующего столбца.

новое_имя_столбца

Новое имя для существующего столбца.

новое_имя

Новое имя для таблицы.

тип_данных

Тип данных нового столбца или новый тип данных для существующего столбца.

ограничение_таблицы

Новое ограничение уровня таблицы для сторонней таблицы.

имя_ограничения

Имя удаляемого существующего ограничения.

CASCADE

Автоматически удалять объекты, зависящие от удаляемого столбца или ограничения (например, ссылающиеся на столбец представления), и, в свою очередь, все объекты, зависящие от этих объектов (см. раздел Отслеживание зависимостей).

RESTRICT

Запретить удаление столбца или ограничения, если есть какие-либо зависимые от них объекты. Это поведение по умолчанию.

имя_триггера

Имя одного триггера, который нужно выключить или включить.

ALL

Выключить или включить все триггеры, принадлежащие сторонней таблице. (Если какие-либо из триггеров сгенерированы внутренне, то потребуются права суперпользователя. Сама система не добавляет такие триггеры в сторонние таблицы, но дополнительный код может это сделать.)

USER

Выключить или включить все триггеры, принадлежащие сторонней таблице, кроме сгенерированных внутренне.

таблица_родитель

Родительская таблица, с которой будет установлена или разорвана связь у этой сторонней таблицы.

новый_владелец

Имя пользователя, который станет новым владельцем этой таблицы.

новая_схема

Имя схемы, в которую будет перемещена эта таблица.


Примечания

Ключевое слово 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. Остальные формы являются расширениями QHB. Кроме того, возможность указать в одной команде ALTER FOREIGN TABLE несколько операций тоже является расширением.

Команда ALTER FOREIGN TABLE DROP COLUMN позволяет удалить единственный столбец сторонней таблицы и оставить таблицу без столбцов. Это является расширением стандарта SQL, который не допускает существование сторонних таблиц без столбцов.


См. также

CREATE FOREIGN TABLE, DROP FOREIGN TABLE