ALTER TABLE
ALTER TABLE — изменить определение таблицы
Синтаксис
ALTER TABLE [ IF EXISTS ] [ ONLY ]имя[ * ]действие[, ... ] ALTER TABLE [ IF EXISTS ] [ ONLY ]имя[ * ] RENAME [ COLUMN ]имя_столбцаTOновое_имя_столбцаALTER TABLE [ IF EXISTS ] [ ONLY ]имя[ * ] RENAME CONSTRAINTимя_ограниченияTOимя_нового_ограниченияALTER TABLE [ IF EXISTS ]имяRENAME TOновое_имяALTER TABLE [ IF EXISTS ]имяSET SCHEMAновая_схемаALTER TABLE ALL IN TABLESPACEимя[ OWNED BYимя_роли[, ... ] ] SET TABLESPACEновое_табл_пространство[ NOWAIT ] ALTER TABLE [ IF EXISTS ]имяATTACH PARTITIONимя_секции{ FOR VALUESуказание_границ_секции| DEFAULT } ALTER TABLE [ IF EXISTS ]имяDETACH PARTITIONимя_секции[ CONCURRENTLY | FINALIZE ] Гдедействиеможет быть следующим: ADD [ COLUMN ] [ IF NOT EXISTS ]имя_столбцатип_данных[ COLLATEправило_сортировки] [ограничение_столбца[ ... ] ] DROP [ COLUMN ] [ IF EXISTS ]имя_столбца[ RESTRICT | CASCADE ] ALTER [ COLUMN ]имя_столбца[ SET DATA ] TYPEтип_данных[ COLLATEправило_сортировки] [ USINGвыражение] ALTER [ COLUMN ]имя_столбцаSET DEFAULTвыражениеALTER [ COLUMN ]имя_столбцаDROP DEFAULT ALTER [ COLUMN ]имя_столбца{ SET | DROP } NOT NULL ALTER [ COLUMN ]имя_столбцаDROP EXPRESSION [ IF EXISTS ] ALTER [ COLUMN ]имя_столбцаADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ (параметры_последовательности) ] ALTER [ COLUMN ]имя_столбца{ SET GENERATED { ALWAYS | BY DEFAULT } | SETпараметр_последовательности| RESTART [ [ WITH ]перезапуск] } [...] ALTER [ COLUMN ]имя_столбцаDROP IDENTITY [ IF EXISTS ] ALTER [ COLUMN ]имя_столбцаSET STATISTICSintegerALTER [ COLUMN ]имя_столбцаSET (атрибут=значение[, ... ] ) ALTER [ COLUMN ]имя_столбцаRESET (атрибут[, ... ] ) ALTER [ COLUMN ]имя_столбцаSET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ALTER [ COLUMN ]имя_столбцаSET COMPRESSIONметод_сжатияADDограничение_таблицы[ NOT VALID ] ADDограничение_таблицы_по_индексуALTER CONSTRAINTимя_ограничения[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] VALIDATE CONSTRAINTимя_ограниченияDROP CONSTRAINT [ IF EXISTS ]имя_ограничения[ RESTRICT | CASCADE ] DISABLE TRIGGER [имя_триггера| ALL | USER ] ENABLE TRIGGER [имя_триггера| ALL | USER ] ENABLE REPLICA TRIGGERимя_триггераENABLE ALWAYS TRIGGERимя_триггераDISABLE RULEимя_правила_перезаписиENABLE RULEимя_правила_перезаписиENABLE REPLICA RULEимя_правила_перезаписиENABLE ALWAYS RULEимя_правила_перезаписиDISABLE ROW LEVEL SECURITY ENABLE ROW LEVEL SECURITY FORCE ROW LEVEL SECURITY NO FORCE ROW LEVEL SECURITY CLUSTER ONимя_индексаSET WITHOUT CLUSTER SET WITHOUT OIDS SET ACCESS METHODновый_метод_доступаSET TABLESPACEновое_табл_пространствоSET { LOGGED | UNLOGGED } SET (параметр_хранения[=значение] [, ... ] ) RESET (параметр_хранения[, ... ] ) INHERITтаблица_родительNO INHERITтаблица_родительOFимя_типаNOT OF OWNER TO {новый_владелец| CURRENT_ROLE | CURRENT_USER | SESSION_USER } REPLICA IDENTITY { DEFAULT | USING INDEXимя_индекса| FULL | NOTHING } иуказание_границ_секции: IN (выражение_границ_секции[, ...] ) | FROM ( {выражение_границ_секции| MINVALUE | MAXVALUE } [, ...] ) TO ( {выражение_границ_секции| MINVALUE | MAXVALUE } [, ...] ) | WITH ( MODULUSчисловая_константа, REMAINDERчисловая_константа) иограничение_столбца: [ CONSTRAINTимя_ограничения] { NOT NULL | NULL | CHECK (выражение) [ NO INHERIT ] | DEFAULTвыражение_по_умолчанию| GENERATED ALWAYS AS (генерирующее_выражение) STORED | GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ (параметры_последовательности) ] | UNIQUE [ NULLS [ NOT ] DISTINCT ]параметры_индекса| PRIMARY KEYпараметры_индекса| REFERENCESцелевая_таблица[ (целевой_столбец) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETEссылочное_действие] [ ON UPDATEссылочное_действие] } [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] иограничение_таблицы: [ CONSTRAINTимя_ограничения] { CHECK (выражение) [ NO INHERIT ] | UNIQUE [ NULLS [ NOT ] DISTINCT ] (имя_столбца[, ... ] )параметры_индекса| PRIMARY KEY (имя_столбца[, ... ] )параметры_индекса| EXCLUDE [ USINGиндексный_метод] (элемент_исключенияWITHоператор[, ... ] )параметры_индекса[ WHERE (предикат) ] | FOREIGN KEY (имя_столбца[, ... ] ) REFERENCESцелевая_таблица[ (целевой_столбец[, ... ] ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETEссылочное_действие] [ ON UPDATEссылочное_действие] } [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] иограничение_таблицы_по_индексу: [ CONSTRAINTимя_ограничения] { UNIQUE | PRIMARY KEY } USING INDEXимя_индекса[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]параметры_индексав ограниченияхUNIQUE,PRIMARY KEYиEXCLUDE: [ INCLUDE (имя_столбца[, ... ] ) ] [ WITH (параметр_хранения[=значение] [, ... ] ) ] [ USING INDEX TABLESPACEтабл_пространство]элемент_исключенияв ограниченииEXCLUDE: {имя_столбца| (выражение) } [ COLLATEправило_сортировки] [класс_операторов[ (параметр_класса_оп=значение[, ... ] ) ] ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ]ссылочное_действиев ограниченииFOREIGN KEY/REFERENCES: { NO ACTION | RESTRICT | CASCADE | SET NULL [ (имя_столбца[, ... ] ) ] | SET DEFAULT [ (имя_столбца[, ... ] ) ] }
Описание
ALTER TABLE меняет определение существующей таблицы. Несколько её разновидностей описаны ниже. Заметьте, что для разных разновидностей могут требоваться разные уровни блокировок. Если явно не отмечено другое, запрашивается блокировка ACCESS EXCLUSIVE. При указании нескольких подкоманд будет запрашиваться самая сильная блокировка из требуемых ими.
ADD [ COLUMN ] [ IF NOT EXISTS ]#Эта форма добавляет в таблицу новый столбец, с тем же синтаксисом, что и
CREATE TABLE. Если указаноIF NOT EXISTSи столбец с таким именем уже существует, это не будет ошибкой.DROP [ COLUMN ] [ IF EXISTS ]#Эта форма удаляет столбец из таблицы. При этом автоматически будут удалены индексы и ограничения таблицы, связанные с этим столбцом. Также будет удалена многовариантная статистика, охватывающая удаляемый столбец, если после его удаления в статистике останутся данные только одного столбца. Если от этого столбца зависят какие либо объекты вне этой таблицы, например, внешние ключи или представления, чтобы удалить их, необходимо добавить указание
CASCADE. Если в команде указаноIF EXISTSи этот столбец не существует, это не считается ошибкой, вместо этого просто выдаётся замечание.SET DATA TYPE#Эта форма меняет тип столбца таблицы. Индексы и простые табличные ограничения, включающие этот столбец, будут автоматически преобразованы для использования нового типа столбца, для чего будет заново разобрано определяющее их выражение. Необязательное предложение
COLLATEзадаёт правило сортировки для нового столбца; если оно опущено, выбирается правило сортировки по умолчанию для нового типа. Необязательное предложениеUSINGопределяет, как новое значение столбца будет получено из старого; если оно отсутствует, выполняется приведение типа по умолчанию, как обычное присваивание значения старого типа новому. ПредложениеUSINGстановится обязательным, если неявное приведение или присваивание с приведением старого типа к новому не определено.При изменении типа столбца статистика столбца удаляется, поэтому после этой операции для таблицы рекомендуется выполнить
ANALYZE.SET/DROP DEFAULT#Эти формы задают или удаляют значение по умолчанию для столбца (удаление равносильно указанию NULL в качестве значения по умолчанию). Новые значения по умолчанию применяются только при последующих командах
INSERTилиUPDATE; их изменения не отражаются в строках, уже существующих в таблице.SET/DROP NOT NULL#Эти формы определяют, будет ли столбец принимать значения NULL или нет.
Указание
SET NOT NULLможно применить к столбцу, только если ни одна из записей таблицы не содержит в этом столбце значениеNULL. Обычно эта проверка производится в момент выполненияALTER TABLEи требует сканирования всей таблицы; однако в случае наличия ограниченийCHECK(и если они не удаляются в той же команде), гарантирующих отсутствиеNULL, сканирование таблицы пропускается.Если данная таблица является секцией, операцию
DROP NOT NULLнельзя выполнить для столбца, если он определён с характеристикойNOT NULLв родительской таблице. Чтобы удалить ограничениеNOT NULLиз всех секций, выполнитеDROP NOT NULLдля родительской таблицы. Даже если ограничениеNOT NULLв родительской таблице отсутствует, при желании такое ограничение может быть добавлено в отдельные секции. Другими словами, потомки могут запрещать значения NULL, даже если родитель их допускает, но не наоборот.DROP EXPRESSION [ IF EXISTS ]#Эта форма преобразует хранимый генерируемый столбец в обычный. Существующие данные в столбцах сохраняются, но будущие изменения будут вноситься не генерирующим выражением.
Если указано
DROP EXPRESSION IF EXISTSи заданный столбец не является хранимым генерируемым столбцом, это не считается ошибкой. В этом случае выдаётся только замечание.ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITYSET GENERATED { ALWAYS | BY DEFAULT }DROP IDENTITY [ IF EXISTS ]#Это формы меняют для столбца свойство идентификации или меняют характеристику генерирования для существующего столбца идентификации. За подробностями обратитесь к описанию
CREATE TABLE. Как иSET DEFAULT, эти формы влияют на поведение только последующих командINSERTиUPDATE; их действие не отражаются в строках, уже существующих в таблице.Если указано
DROP IDENTITY IF EXISTSи заданный столбец не является столбцом идентификации, это не считается ошибкой. В этом случае выдаётся только замечание.SETпараметр_последовательностиRESTART#Эти формы меняют нижележащую последовательность ранее созданного столбца идентификации. Здесь
параметр_последовательности— это параметр, поддерживаемый командойALTER SEQUENCE, напримерINCREMENT BY.SET STATISTICS#Эта форма задаёт ориентир сбора статистики по столбцу для последующих операций
ANALYZE. Диапазон допустимых значений ориентира: 0..10000; при -1 применяется системное значение по умолчанию (default_statistics_target). За дополнительными сведениями об использовании статистики планировщиком запросов PostgreSQL обратитесь к Разделу 14.2.SET STATISTICSзапрашивает блокировкуSHARE UPDATE EXCLUSIVE.SET (атрибут=значение[, ... ] )RESET (#атрибут[, ... ] )Эта форма устанавливает или сбрасывает параметры атрибутов. В настоящее время единственными параметрами атрибутов являются
n_distinctиn_distinct_inherited, которые переопределяют оценку количества различных значений, производимую последующими операциямиANALYZE. Атрибутn_distinctвлияет на расчёт статистики по самой таблице, аn_distinct_inherited— на статистику по таблице, её потомкам и статистику по секционированным таблицам. Если заданное значение положительно, планировщик запросов будет считать, что столбец содержит именно это количество различных значений не NULL. Также можно задавать дробные значения ниже 0 и выше или равные −1. В этом случае планировщик запросов оценивает количество различных значений, умножая абсолютное значение указанного числа на оценочное количество строк в таблице. Например, при -1 будет предполагаться, что различны все значения в столбце, а при -0,5 — что в среднем каждое значение повторяется дважды. Это может быть полезно, когда размер таблицы меняется со временем. За дополнительными сведениями об использовании статистики планировщиком запросов PostgreSQL обратитесь к Разделу 14.2.Для изменения параметров атрибутов запрашивается блокировка
SHARE UPDATE EXCLUSIVE.-
SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }# Эта форма устанавливает режим хранения столбца. Она определяет, хранятся ли данные внутри таблицы или в отдельной таблице TOAST, а также, сжимаются ли они. Режим
PLAINдолжен применяться для значений фиксированной длины, таких какinteger; это вариант хранения внутри, без сжатия. РежимMAINприменяется для хранения внутри, но сжатых данных,EXTERNAL— для внешнего хранения несжатых данных, аEXTENDED— для внешнего хранения сжатых данных.EXTENDEDиспользуется по умолчанию для большинства типов данных, поддерживающих хранилище неPLAIN. ПрименениеEXTERNALпозволяет ускорить операции с подстроками на очень больших значенияхtextиbytea, за счёт проигрыша в объёме хранилища. Заметьте, что предложениеSET STORAGEсамо по себе не меняет ничего в таблице, оно только задаёт стратегию, которая будет реализована при будущих изменениях в таблице. За дополнительными сведениями обратитесь к Разделу 73.2.-
SET COMPRESSION#метод_сжатия Эта форма задаёт метод сжатия для столбца, определяющий, как будут сжиматься значения, помещаемые в этот столбец в будущем (если режим хранения вообще допускает сжатие). При изменении этого метода перезапись таблицы не производится, поэтому уже существующие в таблице данные могут оставаться сжатыми другими методами. Если таблица восстанавливается средством pg_restore, все значения перезаписываются с применением заданного метода сжатия. Если же данные вставляются из другого отношения (например, командой
INSERT ... SELECT), значения из исходной таблицы не обязательно будут распаковываться, так что ранее сжатые данные могут сохраниться с прежним методом сжатия, они не будут пережиматься методом, установленным для целевого столбца. Поддерживаемые методы сжатия:pglzиlz4. (lz4поддерживается, только если PostgreSQL был собран с ключом--with-lz4.) Кроме того,метод_сжатияможет принимать значениеdefault, с которым применяемый метод сжатия определяется текущим значением параметра default_toast_compression во время добавления данных.ADD#ограничение_таблицы[ NOT VALID ]Эта форма добавляет в таблицу новое ограничение, принимая тот же синтаксис описания ограничения, что и
CREATE TABLE, а также дополнительное указаниеNOT VALID, которое в настоящее время поддерживается только для ограничений внешнего ключа и ограничений-проверок.Обычно эта форма влечёт сканирование всей таблицы для проверки, что все существующие строки в таблице удовлетворяют новому ограничению. Но если используется указание
NOT VALID, эта потенциально длительная проверка пропускается. Тем не менее это ограничение будет действовать при последующих добавлениях или изменениях данных (то есть эти операции не будут выполнены, если новая строка нарушит условие ограниченияCHECK, либо при наличии внешнего ключа в главной таблице не найдётся соответствующая строка). Но база данных не будет считать, что ограничение выполняется для всех строк таблицы, пока оно не будет проверено с применением указанияVALIDATE CONSTRAINT. Дополнительную информацию об использовании указанияNOT VALIDвы найдете ниже, в разделе Замечания.Хотя почти все разновидности
ADDтребуют блокировкуограничение_таблицыACCESS EXCLUSIVE, для указанияADD FOREIGN KEYтребуется только блокировкаSHARE ROW EXCLUSIVE. Заметьте, чтоADD FOREIGN KEYзапрашивает такую блокировку как в таблице, в которой добавляется это ограничение, так и в таблице, на которую это ограничение ссылается.С ограничениями уникальности и первичного ключа, добавляемыми в секционированные таблицы, связаны дополнительные требования; см. описание
CREATE TABLE. Кроме того, в настоящее время ограничения внешнего ключа для секционированных таблиц не могут объявляться как непроверенные (NOT VALID).ADD#ограничение_таблицы_по_индексуЭта форма добавляет в таблицу новое ограничение
PRIMARY KEYилиUNIQUEна базе существующего уникального индекса. В это ограничение будут включены все столбцы данного индекса.Индекс не может быть частичным и включать столбцы-выражения. Кроме того, это должен быть индекс-B-дерево с порядком сортировки по умолчанию. С такими ограничениями добавляемые индексы не будут ничем отличаться от индексов, создаваемых обычными командами
ADD PRIMARY KEYиADD UNIQUE.В случае с указанием
PRIMARY KEY, если столбцы индекса ещё не помеченыNOT NULL, данная команда попытается выполнитьALTER COLUMN SET NOT NULLдля каждого столбца. При этом потребуется произвести полное сканирование таблицы, чтобы убедиться, что столбец(ы) не содержит NULL. Во всех остальных случаях это быстрая операция.Если задано имя ограничения, индекс будет переименован и получит заданное имя. В противном случае именем ограничения станет имя индекса.
После выполнения этой команды индекс становится «принадлежащим» ограничению, так же, как если бы он был создан обычной командой
ADD PRIMARY KEYилиADD UNIQUE. Это значит, в частности, что при удалении ограничения индекс будет удалён вместе с ним.Эта форма с секционированными таблицами в настоящее время не поддерживается.
Примечание
Добавление ограничения на базе существующего индекса бывает полезно в ситуациях, когда новое ограничение требуется добавить, не блокируя изменения в таблице на долгое время. Для этого можно создать индекс командой
CREATE INDEX CONCURRENTLY, а затем задействовать его как полноценное ограничение, используя эту запись. См. следующий пример.ALTER CONSTRAINT#Эта форма меняет атрибуты созданного ранее ограничения. В настоящее время изменять можно только ограничения внешнего ключа.
VALIDATE CONSTRAINT#Эта форма проверяет ограничение внешнего ключа или ограничение
CHECK, созданное ранее с указаниемNOT VALID, сканируя всю таблицу с целью убедиться, что ограничению удовлетворяют все строки. Если ограничение уже помечено как проверенное, ничего не происходит. (В чём польза этой команды, вы можете узнать в разделе Замечания.)Эта команда запрашивает блокировку
SHARE UPDATE EXCLUSIVE.DROP CONSTRAINT [ IF EXISTS ]#Эта форма удаляет указанное ограничение таблицы, вместе с нижележащим индексом, если таковой имеется. Если указано
IF EXISTSи заданное ограничение не существует, это не считается ошибкой. В этом случае выдаётся только замечание.DISABLE/ENABLE [ REPLICA | ALWAYS ] TRIGGER#Эти формы настраивают срабатывание триггера(ов), принадлежащего таблице. Отключённый триггер сохраняется в системе, но не выполняется, когда происходит вызывающее его событие. (Для отложенных триггеров состояние включения проверяется при возникновении события, а не когда фактически вызывается функция триггера.) Эта команда может отключить или включить один триггер по имени, либо все триггеры таблицы, либо только пользовательские триггеры (кроме сгенерированных внутрисистемных триггеров ограничений, например, триггеров, реализующих ограничения внешнего ключа или отложенные ограничения уникальности и ограничения-исключения). Для отключения или включения сгенерированных внутрисистемных триггеров ограничений требуются права суперпользователя; отключать их следует с осторожностью, так как очевидно, что невозможно гарантировать целостность ограничений, если триггеры не работают.
На механизм срабатывания триггеров также влияет конфигурационная переменная session_replication_role. Включённые без дополнительных указаний (по умолчанию) триггеры будут срабатывать, когда роль репликации — «origin» (по умолчанию) или «local». Триггеры, включённые указанием
ENABLE REPLICA, будут срабатывать, только если текущий режим сеанса — «replica», а триггеры, включённые указаниемENABLE ALWAYS, будут срабатывать независимо от текущего режима репликации.Эффект этого механизма состоит в том, что в конфигурации по умолчанию триггеры не срабатывают в репликах. Это полезно, потому что если триггер используется в исходной базе для распределения данных по таблицам, система репликации будет реплицировать и распределённые таким образом данные, поэтому триггер не должен срабатывать в реплике второй раз, так как иначе будет иметь место дублирование. Однако если триггер используется для других целей, например, выдаёт уведомления, может иметь смысл установить для него свойство
ENABLE ALWAYS, чтобы он также срабатывал в репликах.Когда эта команда применяется к секционированной таблице, состояния соответствующих «клонированных» триггеров в секциях также изменяются, если не указано
ONLY.Эта команда запрашивает блокировку
SHARE ROW EXCLUSIVE.DISABLE/ENABLE [ REPLICA | ALWAYS ] RULE#Эти формы настраивают срабатывание правил перезаписи, относящихся к таблице. Отключённое правило сохраняется в системе, но не применяется во время переписывания запроса. По сути эти операции подобны операциям включения/отключения триггеров. Однако это не распространяется на правила
ON SELECT— они применяются всегда, чтобы представления продолжали работать, даже в сеансах, исполняющих не основную роль репликации.На механизм срабатывания правил также оказывает влияние конфигурационная переменная session_replication_role, подобное тому, что описано выше применительно к триггерам.
DISABLE/ENABLE ROW LEVEL SECURITY#Эти формы управляют применением относящихся к таблице политик защиты строк. Если защита включается, но политики для таблицы не определены, применяется политика запрета доступа по умолчанию. Заметьте, что политики могут быть определены для таблицы, даже если защита на уровне строк отключена. В этом случае политики не применяются и их ограничения игнорируются. См. также описание
CREATE POLICY.NO FORCE/FORCE ROW LEVEL SECURITY#Эти формы управляют применением относящихся к таблице политик защиты строк, когда пользователь является её владельцем. Если это поведение включается, политики защиты на уровне строк будут действовать и на владельца таблицы. Если оно отключено (по умолчанию), защита на уровне строк не будет действовать на пользователя, являющегося владельцем таблицы. См. также описание
CREATE POLICY.CLUSTER ON#Эта форма выбирает индекс по умолчанию для последующих операций
CLUSTER. Собственно кластеризация таблицы при этом не выполняется.Для изменения параметров кластеризации запрашивается блокировка
SHARE UPDATE EXCLUSIVE.SET WITHOUT CLUSTER#Эта форма удаляет последнее заданное указание индекса для
CLUSTER. Её действие отразится на будущих операциях кластеризации, для которых не будет задан индекс.Для изменения параметров кластеризации запрашивается блокировка
SHARE UPDATE EXCLUSIVE.SET WITHOUT OIDS#Обеспечивающий обратную совместимость синтаксис удаления системного столбца
oid. Так как добавить системные столбцыoidтеперь невозможно, это указание фактически не действует.SET ACCESS METHOD#Эта форма изменяет метод доступа к таблице, переписывая её. За подробным описанием обратитесь к Главе 63.
SET TABLESPACE#Эта форма меняет табличное пространство таблицы на заданное и перемещает файлы данных, связанные с таблицей, в новое пространство. Индексы таблицы, если они имеются, не перемещаются; однако их можно переместить отдельно дополнительными командами
SET TABLESPACE. В секционированной таблице при этом ничего не перемещается, но секции, созданные впоследствии с указаниемCREATE TABLE PARTITION OF, будут использовать это табличное пространство (если только оно не будет переопределено предложениемTABLESPACE).Форма
ALL IN TABLESPACEпозволяет перенести в другое табличное пространство все таблицы текущей базы данных в текущем пространстве, при этом она сначала блокирует все таблицы, а затем переносит каждую из них. Эта форма также поддерживает предложениеOWNED BY, с которым перемещаются только таблицы указанных владельцев. C