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 STATISTICSinteger
ALTER [ COLUMN ]имя_столбца
SET (атрибут
=значение
[, ... ] ) ALTER [ COLUMN ]имя_столбца
RESET (атрибут
[, ... ] ) ALTER [ COLUMN ]имя_столбца
SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN } 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 WITH OIDS SET WITHOUT OIDS INHERITтаблица_родитель
NO INHERITтаблица_родитель
OWNER TO {новый_владелец
| 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
Эта форма меняет тип столбца сторонней таблицы. И это не влияет на нижележащее хранилище: данная операция просто меняет тип, который по мнению Postgres Pro будет иметь этот столбец.
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 WITH OIDS
Эта форма добавляет в таблицу системный столбец
oid
(см. Раздел 5.4). Если в таблице уже есть такой столбец, она не делает ничего. Обёртка сторонних данных должна поддерживать OID, иначе из этого столбца будут читаться просто нулевые значения.Заметьте, что это не равнозначно команде
ADD COLUMN oid oid
(эта команда добавит не системный, а обычный столбец с подходящим именемoid
).SET WITHOUT OIDS
Эта форма удаляет из таблицы системный столбец
oid
. Это в точности равнозначноDROP COLUMN oid RESTRICT
, за исключением того, что в случае отсутствия столбца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
в новой схеме. Чтобы сменить владельца, необходимо быть непосредственным или опосредованным членом новой роли-владельца, а эта роль должна иметь право 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 'value3');
Совместимость
Формы ADD
, DROP
и SET DATA TYPE
соответствуют стандарту SQL. Другие формы являются собственными расширениями Postgres Pro. Кроме того, возможность указать в одной команде ALTER FOREIGN TABLE
несколько операций так же является расширением.
ALTER FOREIGN TABLE DROP COLUMN
позволяет удалить единственный столбец сторонней таблицы и оставить таблицу без столбцов. Это является расширением стандарта SQL, который не допускает существование сторонних таблиц с нулём столбцов.