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, который не допускает существование сторонних таблиц с нулём колонок.
Пред. | Начало | След. |
ALTER FOREIGN DATA WRAPPER | Уровень выше | ALTER FUNCTION |