ALTER FOREIGN TABLE

Название

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

Синтаксис

ALTER FOREIGN TABLE [ IF EXISTS ] имя
    действие [, ... ]
ALTER FOREIGN TABLE [ IF EXISTS ] имя
    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 тип_данных
    ALTER [ COLUMN ] имя_колонки SET DEFAULT выражение
    ALTER [ COLUMN ] имя_колонки DROP DEFAULT
    ALTER [ COLUMN ] имя_колонки { SET | DROP } NOT NULL
    ALTER [ COLUMN ] имя_колонки SET STATISTICS integer
    ALTER [ COLUMN ] имя_колонки SET ( атрибут = значение [, ... ] )
    ALTER [ COLUMN ] имя_колонки RESET ( атрибут [, ... ] )
    ALTER [ COLUMN ] имя_колонки OPTIONS ( [ ADD | SET | DROP ] параметр ['значение'] [, ... ])
    DISABLE TRIGGER [ имя_триггера | ALL | USER ]
    ENABLE TRIGGER [ имя_триггера | ALL | USER ]
    ENABLE REPLICA TRIGGER имя_триггера
    ENABLE ALWAYS TRIGGER имя_триггера
    OWNER TO новый_владелец
    OPTIONS ( [ ADD | SET | DROP ] параметр ['значение'] [, ... ])

Описание

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

ADD COLUMN

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

DROP COLUMN [ IF EXISTS ]

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

IF EXISTS

Не считать ошибкой, если сторонняя таблица не существует. В этом случае будет выдано замечание.

SET DATA TYPE

Эта форма меняет тип колонки в сторонней таблице.

SET/DROP DEFAULT

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

SET/DROP NOT NULL

Устанавливает, будет ли колонка принимать значения NULL или нет.

SET STATISTICS

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

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

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

DISABLE/ENABLE [ REPLICA | ALWAYS ] TRIGGER

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

OWNER

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

RENAME

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

SET SCHEMA

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

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

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

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

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

Параметры

имя

Имя (возможно, дополненное схемой) существующей сторонней таблицы, подлежащей изменению.

имя_колонки

Имя новой или существующей колонки.

новое_имя_колонки

Новое имя существующей колонки.

новое_имя

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

тип_данных

Тип данных новой колонки или новый тип данных существующей колонки.

CASCADE

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

RESTRICT

Отказать в удалении колонки, если существуют зависящие от неё объекты. Это поведение по умолчанию.

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

Имя включаемого или отключаемого триггера.

ALL

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

USER

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

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

Имя пользователя, назначаемого новым владельцем таблицы.

новая_схема

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

Замечания

Ключевое слово COLUMN не несёт смысловой нагрузки и может быть опущено.

При добавлении или удалении колонок (ADD COLUMN/DROP COLUMN), добавлении ограничений NOT NULL или изменении типа колонки (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 'value3');

Совместимость

Формы ADD, DROP и SET DATA TYPE соответствуют стандарту SQL. Другие формы являются собственными расширениями PostgreSQL. Кроме того, возможность указать в одной команде ALTER FOREIGN TABLE несколько операций так же является расширением.

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