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 STATISTICSintegerALTER [ 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
- Автоматически удалять объекты, зависящие от удаляемого столбца или ограничения (например, представления, содержащие этот столбец), и, в свою очередь, все зависящие от них объекты (см. Раздел 5.13). 
- 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, который не допускает существование сторонних таблиц с нулём столбцов.